可以说我具有文件结构:
- products
-- index.ts
-- fooProduct.ts
-- barProduct.ts
-- wootProduct.ts
在每个“产品”文件中,都有获取产品sku
和对象创建者以及可能特定于该产品的其他内容的方法。这是针对React项目的,因此我避免将类作为最佳实践状态(对于传统的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';
我正在努力解决的问题是,这会导致我的从属文件中的FLAT导入非常混乱:
// 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'
我认为这可以更好地实现我的目标,但是我不相信这实际上是一种好习惯,还是想知道是否有更好的方法可以实现类似的目标?
答案 0 :(得分:1)
// 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.