假设我的文件结构如下
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
关键字的一个用例,将来自不同文件的实体组合到同一个模块中,但我找不到任何支持它的文献。
答案 0 :(得分:0)
IMO避免使用默认导出。使用命名导出将更受欢迎。
你可以这样做:
// index.ts
export * from './a'
export * from './b'
您不需要指定内容,使整个内容透明。
默认导出是为了在CommonJS中提供与exports = x
类似的东西,但它有几个缺点。