在我的项目中,我使用他们的定义文件(.d.ts)而不是实际文件(.ts)来引用其他文件,因为typescript编译器倾向于在其路径中编译任何.ts文件,甚至当我想要的只是编译一个文件。引用.d.ts文件可以避免这种情况。
现在,假设我有一个大文件并决定将其分成两个单独的文件,但仍然需要每个文件使用另一个文件。加载第一个文件然后加载另一个文件:
one.ts:
/// <reference path="two.d.ts" />
module myModule {
var data: any;
export function init(): void {
// load script two.js
}
export function twoLoaded(): void {
myModule.doSomething(data);
}
}
two.ts:
/// <reference path="one.d.ts" />
module myModule {
export function doSomething(data: any): void {
// ...
}
myModule.twoLoaded();
}
当我尝试编译其中一个文件时,我收到Overload signatures must all be ambient or non-ambient
错误消息,但在我的阅读项目中,这是一条Duplicate identifier
错误消息。
知道如何解决这个问题吗?
答案 0 :(得分:1)
我通常组织这样的方式是你将一个文件指定为&#34;根文件&#34;。所以,让我们说你有一个使用one.ts和two.ts的main.ts.引用只需要包含在main.ts中,而不是其他文件中。在IntelliJ(我使用的)中,您将文件观察器标记为&#34;仅编译主文件&#34;。
所以设置它的好方法是:
main.ts
/// <reference path="one.ts" />
/// <reference path="two.ts" />
class Main{
constructor(){
new One();
new Two();
}
}
new Main();
然后从其他文件中删除引用。
答案 1 :(得分:0)
错误的差异可以解释为语言服务与编译器的区别。
&#39;重载签名必须全部是环境或非环境的&#39;可以用以下
解释错误declare module foo{}
module foo{}
解决方案:使用带有--noResolve编译器标志的外部模块。