上下文
我們將當前項目(TypeScript + RequireJS)拆分爲單獨的模塊(核心,widget1,...)。我們正在運行TypeScript的0.8.1.1版本。TypeScript:擴展一個已經通過require加載的類
每個模塊都構建爲一個文件,並且核心將在最初加載。這些小部件將被延遲加載,只在需要的情況下,但我想確保這些小部件可以引用我的核心模塊(但是而不是在其輸出中包含該模塊)。
要編譯打字稿到AMD模塊時澄清,import
語句會被編譯成模塊的功能define
的依賴性陣列。例如:
打字稿
import coreModule = module("core");
的JavaScript輸出(與AMD標誌)
define(['require', 'exports', 'core'], function(require, exports, __CoreModule__){
var coreModule = __CoreModule__;
});
這正是我想避免的。
因此,我打算用var someCoreModule = require("core/...");
替換所有import someCoreModule = module("core/...");
陳述。
我現在面臨的問題是一些這些核心模塊正在返回其可以通過微件被擴展的基類。由於打字稿的命名空間,這意味着我需要延長這些如下:
import baseClass = module("core/SomeBaseClass");
class Child extends baseClass.Base {
}
而且ofcourse我有require
一個替換import
語句時仍然需要此相同的語法:
var baseClass = require("core/SomeBaseClass");
class Child extends baseClass.Base {
}
這顯然會導致關於缺少類型(基本)的錯誤。我目前計劃通過提供基類的存根實現來規避這個錯誤。如下:
declare module baseClass {
class Base {
}
}
var baseClass = require("core/SomeBaseClass");
class Child extends baseClass.Base {
}
雖然這個工程,我覺得這相當醜陋的樣子。我需要能夠延長課程,因爲我需要撥打super
。這意味着我無法使用界面來鍵入所需的模塊。
有沒有人知道更好的解決方案,還是我被迫用這種方式解決我的問題?
一如既往,任何幫助非常感謝!
在你的例子中,編譯的'CompilationService.js'正在做我想避免的:)它編譯定義調用的依賴數組中的'EditorPosition'的輸入? – thomaux 2013-04-23 13:52:14
我以爲你試圖避免///引入整個文件*的問題的引用風格。任何你不希望它在主要定義調用中的原因?延遲加載? – basarat 2013-04-23 13:58:14
是的,我只想在需要的時候才加載文件:) – thomaux 2013-04-23 14:01:46