如何在TypeScript AMD模块中定义依赖模块

时间:2012-10-08 13:44:09

标签: typescript

如何使用TypeScript在AMD模块中定义依赖模块,包括例如jQuery和下划线。我使用JavaScript,例如,像这样:

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

如何做到这一点,以便TypeScript编译器生成此代码。

2 个答案:

答案 0 :(得分: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。该团队目前正在对该项目进行修复,但希望不会阻止您。

答案 1 :(得分:2)

由于编译器中存在错误,目前这在打字稿中无效(请参阅stackoverflow)。您需要做的是定义导入moduleAjquery的模块underscore,然后使用-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";
}

<强> underscore.ts

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

使用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的{​​{1}}加载程序应该能够加载模块。