多个Typescript模块没有重复的标识符错误

时间:2015-01-24 12:01:53

标签: typescript

我已将项目拆分为多个bower模块,所有这些都需要引用underscore.d.ts文件

- bower_components
 |- module_a
    |- src
       |- externl-commonjs.ts
 |  |- typings
 |     |- underscore
 |- module_b
    |- src
       |- externl-commonjs.ts
    |- typings
       |- underscore
- src
  |- externl-commonjs.ts
- typings
  |- underscore

我可以自己成功编译module_a和module_b ...但是当它们在上面这样的项目中时,我会得到重复的标识符错误,因为每个外部模块中有多个/// <reference s到underscore.d.ts文件。

你将如何解决这个问题,并为underscore.d.ts提供单一的事实来源。

3 个答案:

答案 0 :(得分:0)

我已使用https://github.com/TypeStrong/grunt-dts-bundle解决了这个问题,{{3}}会从所有内部需要的代码创建d.ts但不会直接链接到任何外部定义。

然后,您可以在顶级项目中引用创建的包,并手动单独引用任何其他类型的依赖项。

答案 1 :(得分:0)

我解决这个问题的方法是使用///<amd-dependency path="foo" name="foo">然后使用declare var foo; 在我的项目中获取amd模块(这是我最想要的)并且没有让Tsc跳线并进入重复的标识符地狱。他们最终会解决这个问题,但我最想要的是检查我的子项目并在我的父项目的上下文中编译它。一旦我安全地进入AMD,我很好。

使用grunt-exec将你的grunt ts任务链接在一起也很酷。通过这种方式,我可以在我的父项目上监视ts,并启动子项目中的ts任务。

答案 2 :(得分:0)

我遇到了同样的问题。一个真正的痛苦。 我是如何解决的:

  1. 请勿在模块a&amp;中包含输入内容。湾仅包括顶级的。
  2. 在您的顶级源文件(externl-commonjs.ts)中,在顶部添加///对typings的引用。由于该文件包含其他.ts文件,因此他们将获取/// reference
  3. 一些很棒的背景文章:

    1. http://blog.mgechev.com/2016/03/28/ambient-type-definitions-duplicate-identifier-typescript-fix/
    2. http://ivanz.com/2016/06/07/how-does-typescript-discover-type-declarations-definitions-javascript
    3. 看起来TypeScript 2.0添加了&#34; typeroots&#34;部分到tsconfig来帮助解决这个问题。见https://www.typescriptlang.org/docs/handbook/tsconfig-json.html