我们的项目中有大约一百个.ts
个文件和十几个.d.ts
个文件。在TypeScript 0.8.3上处理引用时,我们有一个名为_references.d.ts
的文件,它按依赖顺序列出了所有定义文件,并确保它出现在项目{{1}中的任何其他打字项之前。文件。
.csproj
这样就可以正确解析所有引用,而无需在任何打字稿源文件中添加任何引用。但是,在升级到TypeScript 0.9.0.alpha后,这似乎不再起作用。现在,即使我们在每个源文件中引用<ItemGroup>
<TypeScriptCompile Include="Scripts\_references.d.ts" />
...
并且必须遍历所有源文件并包含对每个定义文件的直接引用,它也不起作用。这将是一个痛苦,我也不喜欢这种方法,因为我们将无法知道每个_references.d.ts
文件中未使用的引用,并且没有简单的方法来清理它们。所以我的问题是,这是设计上的痛苦,还是有任何其他方式可以让编译器对引用感到满意?
谢谢!
答案 0 :(得分:2)
从命令行有一个清晰的TypeScript编译管道更好,我想这就是发生的事情。
我喜欢在我的项目中有一个reference.ts。这反过来引用了我项目中的所有文件。然后我的项目中的每个文件都将此主文件引用为:
/// <reference path="references.ts" />
注意 .ts 而不是 .d.ts
Typescript将解决循环依赖(文件引用之间...而不是类型),您不必担心这一点。
将项目编译为:
tsc --out output.js --declaration
并获得一个js + output.d.ts文件,以便在其他项目中重用。
答案 1 :(得分:2)
我想我发现了什么问题。在我们的_references.d.ts
文件中,在任何引用之前有一个在文件顶部声明的接口。编译器没有提供任何信息性错误,只是忽略了那些引用。
因此,所有/// <reference path="..." />
都需要在文件中排在第一位。
答案 2 :(得分:1)
我不完全确定,但 alpha 版本可能只缺少此功能。考虑到它是预览 0.9,并不支持所有功能。还有other已知的功能缺少0.9 alpha。当然,您可能希望转到TypeScript项目站点并直接询问它们。
BTW这是确保每个文件引用定义的一个不错的小技巧,尽管我同意BASarat的说法,使用此设置无法从命令行构建它。
在我们的项目中,我们仅将这些引用用于实际定义文件,所有其他模块都按意图导入。我们提供了一些包装器定义文件,例如general_libraries.d.ts
和myproject.core.d.ts
。通过这种方式,我们可以轻松添加或删除库的定义文件,而无需在每个引用它们的位置更新它。
另请注意,当您有2个模块时,A&amp; B和A引用定义文件C和B导入A,B知道C而不必再次引用它。