可以说我有文件结构:
- products
-- index.ts
-- fooProduct.ts
-- barProduct.ts
-- wootProduct.ts
在每个“产品”文件中,有一些方法可以获取产品sku
和一个对象创建者以及可能的其他产品特定的东西。这是一个反应项目,所以我避免将课程作为最佳实践状态(对于经典的OO人来说这是一个艰难的过渡)。
例:
// products/fooProduct.ts
export interface FooProduct extends BaseProduct { //base defined in index
//...
}
function getFooProductSku(){
}
function createFooProduct(){
}
function doFooStuff(){
}
在我的索引文件中,我正在导出所有内容
// products/index.ts
export * from './fooProduct';
export * from './fooProduct';
export * from './fooProduct';
我正在努力解决的问题是,这会导致我的依赖文件中出现非常混乱的导入:
// dep-file.ts
import { FooProduct, createFooProduct, getFooProductSku, doFooStuff,
BarProduct, createBarProduct, getBarProductSku,
WootProduct, createWootProduct, getWootProductSku } from './products'
上面看起来并不可怕,但实际上在一个更复杂的领域,它变得笨拙且难以阅读。我认为更大的问题是通过命名约定(EG Foo
前缀)查看哪些函数紧密耦合的唯一方法。
为了解决这个问题,我在导出的对象中嵌套了我的方法,所以我上面的类看起来像这样:
export interface FooProduct extends BaseProduct { //base defined in index
//...
}
export const fooProduct = {
getProductSku: () => {
},
createProduct: () => {
},
doStuff: () => {
}
}
这允许我从函数名称中删除Foo
,现在相同的依赖导入现在看起来像这样,无论添加了哪些其他方法:
// dep-file.ts
import { FooProduct, fooProduct,
BarProduct, barProduct,
WootProduct, wootProduct } from './products'
我认为这更好地实现了我的目标,但我不相信这实际上是一种好的做法,或者想知道是否有更好的方法来实现类似的目标?
// products/index.ts
import * as FooModule from './fooProduct';
import * as BarModule from './barProduct';
export { FooModule, BarModule };
// dep-file.ts
import { FooModule, BarModule } from './products';
type t = FooModule.FooProduct;
// Etc. Change the names as desired.