1

我们的项目中有大约一百个.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文件中未使用的引用,也没有简单的方法来清理它们。所以我的问题是,这种痛苦是设计使然,还是有其他方法可以让编译器对引用感到满意?

谢谢!

4

3 回答 3

2

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

所以 all /// <reference path="..." />'s 需要首先出现在文件中。

于 2013-05-30T23:17:09.613 回答
2

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

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

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

注意.ts而不是.d.ts

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

将您的项目编译为:

tsc --out output.js --declaration

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

于 2013-05-30T00:00:17.137 回答
1

我不完全确定,但这个功能可能只是alpha版本中缺少的。考虑到它是 0.9 的预览版,因此尚未支持所有功能。0.9 alpha中还缺少其他已知功能。可以肯定的是,您可能想访问 TypeScript 项目站点并直接询问他们。

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

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

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

于 2013-05-30T14:30:36.760 回答