如何防止模块导出变得笨拙

问题描述 投票:1回答:1

可以说我有文件结构:

- 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'

我认为这更好地实现了我的目标,但我不相信这实际上是一种好的做法,或者想知道是否有更好的方法来实现类似的目标?

typescript es6-modules code-organization
1个回答
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.
© www.soinside.com 2019 - 2024. All rights reserved.