打字稿相当于JS Module模式

时间:2014-11-29 18:50:41

标签: javascript module typescript

我正在使用JS模块模式(如this post中所述),我的代码如下所示:

Foo = (function($, ko) {

    //Constructor for Foo
    var Foo = function () {
        //Uses $ and ko
    };
    return Foo;

})($, ko)

我想将此模式转换为TypeScript等效项,但我不确定它是什么。我用这个替换整个IIFE吗?

 class Foo {
     constructor() {
         //Uses $ and ko
     }
 }

这似乎大致相当,但它失去了我的依赖项的显式注入。这是在TypeScript中执行此操作的方法吗?

2 个答案:

答案 0 :(得分:1)

Typescript是JavaScript的超集,因此您的JavaScript代码是有效的TypeScript。下面的代码编译为完全相同的JavaScript;

var $, ko;
var Foo = (function($, ko) {

    //Constructor for Foo
    var Foo = function () {
        //Uses $ and ko
    };
    return Foo;

})($, ko)

var theFoo = new Foo();

或者,如果要使用TypeScript类,可以在TypeScript中将值传递给构造函数;

var $, ko;
class Foo {
    constructor($, ko) {
     //Uses $ and ko
    }
}

var theFoo = new Foo($, ko);

制作此Javascript:

var $, ko;
var Foo = (function () {
    function Foo($, ko) {
        //Uses $ and ko
    }
    return Foo;
})();
var theFoo = new Foo($, ko);

这并不等同于您的原始代码,但它可能有助于此目的。

答案 1 :(得分:0)

 import $ = require("../vendor/jquery")

这是你在找什么?

要记住的一点是,任何JavaScript代码都是有效的TypeScript代码。像以前一样使用jQuery,它会正常工作。否则你需要更具体。