1

さまざまな外部モジュールを含む TypeScript プロジェクトがあります。たとえば、次のステートメントでモジュールをインポートすると機能します

import myExternalModule = module("http://mylocalapphost/tsmodules/mod1");
var myObject = new myExternalModule.importedInteface('var1', 'var2');

tsc を使用して .ts を .js に変換すると、次のような結果しか得られません。

var myExternalModule = require("http://mylocalapphost/tsmodules/mod1");

しかし、内部モジュールのように、この .js ファイルにモジュールを実装する必要があります。どうすればいいですか?


これは2つのファイルです(名前が悪くてすみません...):

// mod1.ts (at a local server)
export class importedClass {
  private prVar: number = 0;
  constructor(public var1: string, public var2: string){}
  public func1(km: number){
    this.prVar += km;
  }
  public getPrVar(){
    return this.prVar;
  }
}

// main.ts
import myExternalModule = module(" path to mod1 ");
var myObject = new myExternalModule.importedClass('string var1', 'string var2');
myObject.func1(20);

結果として、次のように、アプリがサーバーで実行されるため (モジュールが配置されているローカル サーバーに接続せずに)、すべてのインポートされたモジュール/クラスなどを含む .js ファイルが1 つ必要です。

var importedClass = (function () {
    function importedClass(var1, var2) {
        this.var1 = var1;
        this.var2 = var2;
        this.prVar = 0;
    }
    importedClass.prototype.func1 = function (km) {
        this.prVar += km;
    };
    importedClass.prototype.getPrVar = function () {
        return this.prVar;
    };
    return importedClass;
})();
var myObject = new importedClass('string var1', 'string var2');
myObject.func1(20);
4

1 に答える 1

3

TypeScriptコードファイルまたは定義があるモジュールではなく、外部モジュールをロードしている場合は、require関数を宣言して次のようにロードすることをお勧めします。

declare var require: any;

var myExternalModule = require("http://mylocalapphost/tsmodules/mod1");
var myObject = new myExternalModule.importedInteface('var1', 'var2');

これにより、次の JavaScript が生成されます。

var myExternalModule = require("http://mylocalapphost/tsmodules/mod1");
var myObject = new myExternalModule.importedInteface('var1', 'var2');

それほど違いはありませんが、純粋に動的にする代わりに、オプションで TypeScript のコードに入力を追加することもできます。

単一の JS ファイル出力に関して - モジュールの読み込みを使用している場合、それは実際には関係ありません。モジュールローダーは、実行時にファイルの取得を処理します。

于 2012-12-17T11:48:35.977 に答える