環境
現在のプロジェクト (TypeScript + RequireJS) を個別のモジュール (core、widget1、...) に分割しています。TypeScript のバージョン 0.8.1.1 を実行しています。
各モジュールは 1 つのファイルにビルドされ、最初にコアがロードされます。ウィジェットは、必要な場合にのみ遅延ロードされますが、ウィジェットがコアモジュールを参照できるようにしたい (ただし、モジュールを出力に含めないでください)。
TypeScript を AMD モジュールにコンパイルするときに明確にするために、ステートメントはモジュールの関数import
の依存配列にコンパイルされます。define
例:
TypeScript
import coreModule = module("core");
JavaScript 出力 (AMD フラグ付き)
define(['require', 'exports', 'core'], function(require, exports, __CoreModule__){
var coreModule = __CoreModule__;
});
これはまさに私が避けようとしているものです。
import someCoreModule = module("core/...");
したがって、すべてのステートメントをステートメントに置き換えることを計画していvar someCoreModule = require("core/...");
ます。
問題
私が直面している問題は、これらのコア モジュールの一部が、ウィジェットによって拡張できる基本クラスを返すことです。TypeScript の名前空間により、これは次のようにこれらを拡張する必要があることを意味します。
import baseClass = module("core/SomeBaseClass");
class Child extends baseClass.Base {
}
import
もちろん、ステートメントをrequire
1に置き換えるときも、この同じ構文が必要です。
var baseClass = require("core/SomeBaseClass");
class Child extends baseClass.Base {
}
これは明らかに型 (Base) の欠落に関するエラーになります。現在、基本クラスのスタブ実装を提供することで、このエラーを回避する予定です。次のように:
declare module baseClass {
class Base {
}
}
var baseClass = require("core/SomeBaseClass");
class Child extends baseClass.Base {
}
これはうまくいきますが、私はこれがかなり醜いと思います。への呼び出しが必要なため、クラスを拡張できる必要がありますsuper
。これは、インターフェイスを使用して必要なモジュールを入力できないことを意味します。
誰かがより良い解決策を知っていますか、それとも私はこの方法で問題を解決しなければなりませんか?
いつものように、どんな助けも大歓迎です!