2015-10-14 143 views
1

有沒有一種方法可以將TypeScript類作爲UMD模塊導出並啓用嚴格模式? 「gotcha」是嚴格的模式部分。TypeScript類以嚴格模式導出爲UMD模塊

我的代碼看起來是這樣的:

class Foo { 
    bar(): Foo.Bam {} 
} 

namespace Foo { 
    export function boom() {} 
    export interface Bam {} 
} 

export = Foo; 

其他地方的模塊可以像:

import * as Foo from 'my-module'; 

var foo = new Foo(); 
foo.bar() 

Foo.boom(); 

interface Kaboom extends Foo.Bam {} 

我要嚴格模式適用於所有的Foo,而不是整個腳本,因爲它可能與其他未知的腳本一致。

定義文件也正在生成。

我可以在構建過程中將所有內容都封裝在閉包中,但我正在尋找一個預編譯解決方案。

編輯:

增加了更多的細節,我的問題,以防萬一有人發現在未來的方式。

我結束了剛剛添加一個簡單的後編譯修復。 UMD模塊生成後。我替換此行:

})(["require", "exports"], function (require, exports) { 

這一行:

})(["require", "exports"], function (require, exports) {"use strict"; 

現在在模塊內部的一切是嚴格,腳本本身是沒有的。

+0

這是你在找什麼https://pastee.org/kzp82? (我把代碼http://www.typescriptlang.org/Playground) –

+0

不,它需要使用'--module umd'導出,謝謝:) – thoughtrepo

回答

1

如果您以標準方式使用您的模塊(即根據需要加載它們),則可以將其添加到文件的頂部 - 語句將被限定爲文件。

"use strict" 

class Foo { 
    bar() {} 
} 

namespace Foo { 
    export function bar() {} 
} 

export = Foo; 

如果您在您的實際輸出組合成一個單一的文件,你不能限制聲明的範圍,而不會引入命名空間(題外話:我不是內部模塊/命名空間的粉絲)。

namespace Example { 
    "use strict" 

    export class Foo { 
     bar() {} 
    } 
} 

namespace Foo { 
    export function bar() {} 
} 

export = Example.Foo; 
+0

當它被延遲加載時沒有問題。但是,當模塊與其他模塊捆綁在一起用於生產使用(requirejs)時,我不希望嚴格模式在那裏出現。該模塊將公開可用,所以我只是想覆蓋我的基地。添加其他名稱空間的第二個選項有效,直到我嘗試生成定義文件;錯誤TS4082。我最終只是實現了構建腳本修復,但我會用細節更新我的問題。謝謝 :) – thoughtrepo