2

環境

現在のプロジェクト (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もちろん、ステートメントをrequire1に置き換えるときも、この同じ構文が必要です。

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。これは、インターフェイスを使用して必要なモジュールを入力できないことを意味します。

誰かがより良い解決策を知っていますか、それとも私はこの方法で問題を解決しなければなりませんか?

いつものように、どんな助けも大歓迎です!

4

2 に答える 2

0

間違った答え。文脈のために残しました。

解決しようとしている問題:ウィジェットがコア モジュールを参照できるようにしたいのですが、これらを出力ファイルに含めません。

あなたがするとき:

import baseClass = module("core/SomeBaseClass");

--module 'amd'コンパイラフラグを使用してコンパイルし、達成しようとしているのdefinerequire同じ呼び出しを作成します。私が作成したサンプルをここで見ることができます: https://github.com/basarat/TypeScriptEditor/tree/gh-pages/scripts

于 2013-04-23T13:46:39.293 に答える