6

jQuery やアンダースコアなど、TypeScript を使用して AMD モジュールの依存モジュールを定義するにはどうすればよいですか。JavaScript を使用して、たとえば次のようにします。

define('moduleA',
    ['jquery', 'underscore'], function ($, _) {
    }
});

TypeScriptコンパイラがこのコードを生成するようにするにはどうすればよいですか。

4

2 に答える 2

3

コンパイラ(0.8)の現在の実装では、求めているものを実現する方法は次のとおりです。

test.ts:

import jquery = module("jquery");
import underscore = module("underscore");

export module A {
    console.log(jquery.$ + underscore._);
}

jquery.ts:

export var $ = null;

underscore.ts:

export var _ = null;

モジュールスイッチを使用してtest.tsをコンパイルする場合:

tsc --module AMD test.ts

次のJSファイルが生成されます。

define(["require", "exports", "jquery", "underscore"], function(require, exports, __jquery__, __underscore__) {
    var jquery = __jquery__;
    var underscore = __underscore__;
    (function (A) {
        console.log(jquery.$ + underscore._);
    })(exports.A || (exports.A = {}));
})

モジュール内にimportステートメントを配置すると、バグのためにcodegenが正しく記録されることに注意してください。チームは現在、そのアイテムの修正に取り組んでいますが、うまくいけば、それがあなたをブロックすることはありません。

于 2012-10-08T16:22:25.767 に答える
2

これは現在、コンパイラのバグにより typescript では正しく機能しません ( stackoverflowを参照)。あなたがする必要があるのは、 と をインポートするモジュールを定義し、moduleAそれを でコンパイルすることです。基本的に、次の 3 つのファイルが必要です。jqueryunderscore-module amd

moduleA.ts

export module moduleA {
    import jquery = module("jquery");
    import underscore = module("underscore");
    console.log(jquery.jquery);
    console.log(underscore.underscore);
}

jquery.ts

export module jquery {
    var jquery = "jquery";
}

アンダースコア.ts

export module underscore {
    var underscore = "underscore";
}

これら 3 つのファイルを でコンパイルするtsc -module amdと、次のコードが生成されますmoduleA.js

define(["require", "exports"], function(require, exports) {
    (function (moduleA) {
        var jquery = __jquery__;

        var underscore = __underscore__;

        console.log(jquery.jquery);
        console.log(underscore.underscore);
    })(exports.moduleA || (exports.moduleA = {}));

})

上で述べたように、コンパイラのバグが原因で、このコードは実際には正しくなく__jquery__、実行時に見つからないと文句を言うでしょう。ただし、このバグが修正されると、amdローダーはnode.jsモジュールをロードできるようになります。

于 2012-10-08T14:05:36.790 に答える