【问题标题】:Issue with references upgrading to TypeScript 0.9.0.alpha参考升级到 TypeScript 0.9.0.alpha 的问题
【发布时间】:2013-05-31 07:17:09
【问题描述】:

我们的项目中有大约一百个.ts 文件和十几个.d.ts 文件。在 TypeScript 0.8.3 上处理引用,我们有一个名为 _references.d.ts 的文件,它按依赖顺序列出了所有定义文件,并确保它出现在项目的 .csproj 文件中的任何其他 typescript 项之前。

<ItemGroup>
  <TypeScriptCompile Include="Scripts\_references.d.ts" />
  ...

这样,所有引用都被正确解析,而无需我们在任何打字稿源文件中添加任何引用。但是,升级到 TypeScript 0.9.0.alpha 后,这似乎不再起作用。现在,即使我们在每个源文件中引用_references.d.ts 并且必须遍历所有源文件并包含对每个定义文件的直接引用,它也不起作用。这会很痛苦,我也不喜欢这种方法,因为我们无法知道每个.ts 文件中未使用的引用,而且没有简单的方法来清理它们。所以我的问题是,这种痛苦是设计使然,还是有其他方法可以让编译器对引用感到满意?

谢谢!

【问题讨论】:

  • 0.9 不仅对 0.8 进行了重大更改。您正在生产项目中使用 alpha 版本。我会考虑至少等到它结束 Alpha 版。
  • 它在一个单独的分支上。因此,我们希望尽可能与最新版本兼容,并报告可能影响我们代码的问题。
  • 我更喜欢在生产环境中使用最新版本。它只生成 javascript,这是人类可观察到的。如果它正在生成二进制文件,我会避开 :)

标签: typescript


【解决方案1】:

最好有一个从命令行编译 TypeScript 的清晰管道,我想这就是发生的事情。

我喜欢在我的项目中有一个reference.ts。这反过来又引用了我项目中的所有文件。然后我项目中的每个文件都将这个主文件引用为:

/// <reference path="references.ts" />

注意 .ts 而不是 .d.ts

Typescript 将解决循环依赖关系(文件引用之间......而不是类型),您无需担心这一点。

编译你的项目为:

tsc --out output.js --declaration

你会得到一个 js + output.d.ts 文件,以便在其他项目中重用。

【讨论】:

  • 我试过 .ts 而不是 .d.ts 但我看不出有什么区别。我在specs(参见第 11.1.1 节)中没有看到任何说明源文件和定义文件的依赖关系处理方式不同的内容。我看到的唯一区别是为 .ts 文件创建了一个源映射文件,但为 .d.ts 文件创建了一个源映射文件。
  • 如果您的所有 .d.ts 包含的是对 .ts 文件的文件引用,则不会产生影响。但是如果你把声明放在 .d.ts 中,它们就不会成为生成的 .d.ts 的一部分。请参阅:stackoverflow.com/a/16687938/390330
【解决方案2】:

我想我找到了问题所在。在我们的_references.d.ts 文件中,有一个接口在任何引用之前在文件顶部声明。编译器没有给出任何信息错误,只是忽略了这些引用。

所以所有/// &lt;reference path="..." /&gt; 都需要在文件中排在第一位。

【讨论】:

    【解决方案3】:

    我不完全确定,但 alpha 版本可能只是缺少此功能。考虑到它是 0.9 的 preview,因此尚未支持所有功能。 other 已知的功能也缺少 0.9 alpha。可以肯定的是,您可能想去 TypeScript 项目网站并直接询问他们。

    顺便说一句,这是确保每个文件都引用定义的一个不错的小技巧,尽管我同意 BASarat 的观点,即使用此设置您无法从命令行构建它。

    在我们的项目中,我们仅将这些引用用于实际定义文件,所有其他模块均按预期导入。我们提供了一些包装器定义文件,例如general_libraries.d.tsmyproject.core.d.ts。通过这种方式,我们可以轻松地添加或删除库的定义文件,而无需在它们引用的每个地方都进行更新。

    另请注意,当您有 2 个模块 A 和 B,并且 A 引用定义文件 C 并且 B 导入 A 时,B 知道 C 而无需再次引用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2014-12-28
      • 1970-01-01
      相关资源
      最近更新 更多