我想在.ts文件中引用另一个.ts文件。在我的真实项目中,我只需要这样做以保证类型安全(覆盖继承的成员以进行正确的编译)。
我的样本:
Test1.ts:
export class Test1 {
}
Test2.ts:
/// <reference path="Test1.ts" />
export class Test2 {
abc: Test1; // ERROR: Test1 could not be found
}
这不可能吗? 我想避免导入,因为它是输出的JavaScript文件中不需要的开销。
更新:我使用Test1作为amd模块,其类Test1被实例化并由底层框架注入到类Test2的实例中。这就是为什么我需要export关键字但不想直接导入模块Type1 - 我只需要引用该类以避免编译器错误并具有类型安全性等。
答案 0 :(得分:4)
不使用模块加载器
只有在使用某种模块模式(AMD / CommonJS)时,文件根级别的export关键字才有意义。如果你不是以下将工作:
Test1.ts:
class Test1 { // Do not use export
}
Test2.ts:
/// <reference path="Test1.ts" />
class Test2 {
abc: Test1; // No Error
}
但是,如果你这样做,你有责任确保在Test2.js之前加载Test1.js,可能使用脚本标记。
注意:如果在不使用模块加载器的情况下使用根级别导出,例如:
export class Test2 {
}
生成的javascript:
var Test2 = (function () {
function Test2() { }
return Test2;
})();
exports.Test2 = Test2;
错误,因为 exports 未在任何地方定义。
如果 使用AMD(或CommonJS):
然后你需要使用导入来告诉加载器加载文件:
Test1.ts:
export class Test1 {
}
Test2.ts:
// no reference to other ts required.
import mod = module("Test1"); // Instead you need to load the module
export class Test2 {
abc: mod.Test1; // Reference by module
}
的另外强> 的
在AMD版本中,每个文件 模块。所以我不希望在文件中有一个模块,因为那是另一个重定向级别。即我需要importedFile.module.class
而不是importedFile.class
,其中importedFile
将是我选择在导入时调用文件的内容(我在给定示例中将其称为mod
)< / p>
答案 1 :(得分:1)
您必须在模块中添加该类,以便外部世界通过其模块引用它。
实施例: 的 Test1.ts 强>
module SomeModule {
export class Test1 {
}
}
<强> Test2.ts 强>
/// <reference path="Test1.ts" />
export class Test2 {
abc: SomeModule.Test1;
}
您可以选择将Test2添加到同一个“命名空间”,然后引用Test1而不指定模块名称:
module SomeModule {
export class Test2 {
abc: Test1;
}
}