一直快樂地開發利用與CommonJS的外部模塊「附加」模塊類的打字稿幾個月如下:導出混合型和模塊
exports = JQ;
class JQ {
a = 0;
}
module JQ {
export class HelpClass {}
export interface Something {}
}
我喜歡這種模式,因爲它使包含在文件的模塊,減少進口數量,並且仍然暴露一個不錯的API。
現在,我不想導出一個類,而想導出一個混合類型,以便它可以用作其他函數和類「內部」的函數,例如jQuery,Underscore和許多其他庫。
我知道如何聲明以及如何在TypeScript中創建混合類型,但是不管用附加模塊導出它。我確實獲得了正確發佈的JS代碼,但編譯器抱怨。
例如,這樣的:
export = JQ;
var JQ = <JQ.JQStatic>function (a:string) { return a; };
JQ.method = function() { return 1; };
module JQ {
export interface JQStatic {
(a:string):string;
method() :number;
}
// Additional class here
export class SomethingElse {}
}
生產什麼樣子的權利JS代碼(外觀酷似如果JQ是一個類,而不是混合型產生的一個),但編譯器爲重複的識別符錯誤,智能感應器停止工作。
如果我刪除附加類SomethingElse
,它工作正常,所以我想這是導出混合類型的特例。
我測試了它也打字稿遊樂場並得到了相同的結果:儘管class JQ
和var JQ
都在發出一個JS var JQ
,當它是一類打字稿允許和接受它,否則不是。
我試圖做什麼不受支持?但是,由於發佈的JS是有效的,所以它是編譯器中的一個功能,如果這被報告爲TypeScript開發人員的缺陷?
這工作得很好,但它導出一個單一的功能,而不是一個混合類型的實例。主要區別在於,這裏的方法()完全是靜態的,而在混合類型中,它可以在閉包內部具有一個狀態,併產生具有不同閉包的不同實例。我重新審視了我的代碼以支持這種缺陷,但仍然認爲它缺少打字稿,應該支持。 –