打字稿等效于 JS 模块模式

Typescript equivalent to JS Module pattern

本文关键字:JS 模块 模式      更新时间:2023-09-26

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

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

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

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

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

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);

这并不直接等同于您的原始代码,但它可以达到目的。

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

这就是你要找的?

要记住的一件事是,任何JavaScript代码都是有效的TypeScript代码。按照你过去的方式使用jQuery,它会很好地工作。否则,您需要更具体。