,不使用模塊加載
出口關鍵字在你的文件的根目錄,如果你使用的是一些模塊模式(AMD/CommonJS的)纔有意義。如果您不是下面的工作:
Test1.ts:
class Test1 { // Do not use export
}
Test2.ts:
/// <reference path="Test1.ts" />
class Test2 {
abc: Test1; // No Error
}
但是,如果你這樣做,你有責任確保Test1.js在Test2.js之前加載,可能使用腳本標記。
注意:如果您在不使用模塊加載程序的情況下使用根級導出,例如,:
export class Test2 {
}
生成的JavaScript:
var Test2 = (function() {
function Test2() { }
return Test2;
})();
exports.Test2 = Test2;
是錯誤因爲出口不被任何定義。
如果你是使用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
)
雖然我同意你關於使用AMD,這個問題並沒有提及這個具體的需求,這就是爲什麼我的答案直接關於如何導出和消費另一個.ts文件避免導入的問題 - 正如問題所述。 根據TypeScript規範「導出聲明聲明可從外部訪問的模塊成員」,因此導出的類應該是模塊的成員。 – jfoliveira 2013-05-09 22:06:57
如果他在不使用模塊加載器的情況下執行'export class Test2',他將在運行時得到'exports not defined'錯誤。 – basarat 2013-05-09 22:12:24
嗯,考慮到它解決了作者在給定場景中的當前情況,我的答案被拒絕投票是很奇怪的。如果這是更好的答案或不是由作者決定,但看到它被拒絕投票有點令人沮喪。 – jfoliveira 2013-05-09 22:25:35