大多数可扩展的打字稿模块组织具有最少的开销?

时间:2017-07-11 20:01:01

标签: typescript ecmascript-6

假设我的文件结构如下

controllers
  index.ts
  user.ts
  topic.ts
models
  index.ts
  user.ts
  topic.ts

每个index.ts文件用于合并目录中的导出实体。其他文件包含同一个名称的导出。

对我来说最直观的认知模型是通过

从其他文件访问用户模型
///someExternalModule.ts (method 1)

import models from '../models';

models.user.method();

因此保持models/index.ts看起来像

///models/index.ts  (method 1)

import {user} from '../user';

const models = {
  user
};

export default models;

但是,我通常在其他代码库中看到的是附加到每个模型/控制器的后缀。

///someExternalModule.ts (method 2)

import {userModel} from '../models'

索引中含有语法糖:

///models/index.ts  (method 2)
export {userModel} from './user'

我知道这是一个有点令人讨厌的问题,但我觉得必须有一些客观的利弊。例如,每次我们想要访问其中一个模型时,是否存在导入整个模型目录的开销?

此外,是否有更优雅的方式来维护这两种index.ts?这似乎是现在应该自动化的东西 - 我假设80%的项目只想代理目录中文件导出的每个实体的导出。这种组织似乎应该是typescript module关键字的一个用例,将来自不同文件的实体组合到同一个模块中,但我找不到任何支持它的文献。

1 个答案:

答案 0 :(得分:0)

IMO避免使用默认导出。使用命名导出将更受欢迎。

你可以这样做:

// index.ts
export * from './a'
export * from './b'

您不需要指定内容,使整个内容透明。

默认导出是为了在CommonJS中提供与exports = x类似的东西,但它有几个缺点。