避免依赖性赋值错误的最佳实践?

时间:2017-09-15 19:29:24

标签: typescript

我有一些我正在处理的包裹。他们导出类。一般的概念是,有一个核心包定​​义数据存储行为,然后是postgres包实现postgres的数据存储,另一个使用redis存储实现相同的东西,等等。

我的问题出在我的依赖树中,因为基础数据存储区依赖于rxjs,而某些插件模块引用rxjs。所以:

+ node modules
+ -- core
     +  rxjs 5.4.0
+ -- postgres
     +  rxjs 5.4.1

除非核心和postgres模块声明对完全相同版本的rxjs的依赖关系,否则这两个不同的rxjs包将不会被删除。

它们实际上是相同的版本,但它们不是。我明白了。我可以在那里处理角落案件。问题是我不能再说了

const pgstore: Store = new PostgresStore();

因为我基本上不能将PostgresStore(在我的postgres包中声明)分配给一个通用的Store变量(在我的核心包中声明),因为有两个不同版本的rxjs在播放,因此Subject<string>我作为私有财产存储在商店最终是两种不同的主题,并且这些不是可交叉分配的。 (例如,编译失败,因为“主题不能分配给主题类型,存在两个具有此名称的不同类型,但它们不相关。”)

我必须想象这并不罕见。什么是最佳实践(在构造依赖关系,devdependencies等)以避免这种挂断?它基本上导致了一个非常脆弱的安装,偶尔我花了一个小时摆弄npm和我的package.json文件以正确地重复删除(这也会干扰我使用npm link本地的能力关于依赖包的开发,因为这会使重复数据删除更加困难。)

1 个答案:

答案 0 :(得分:0)

概述here的一个特定解决方案是通过专门告诉typescript需要什么版本的东西来修复有问题的声明。我已将tsconfig.json更新为包含:

compilerOptions: {
  "baseUrl": ".",
  "paths": {
    "@angular/*": ["node_modules/@angular/*"],
    "rxjs": ["node_modules/rxjs"],
    "plump": ["node_modules/plump"],
    "rxjs/*": ["node_modules/rxjs/*"]
  }
}

现在似乎正在解决我的问题 - 我仍然能够使用npm link来处理我的丰富模块而没有打字稿让我感到很沮丧。

暂时搁置这个问题,因为这里可能有更好的答案。

相关问题