TypeScript Class 以严格模式导出为 UMD 模块

TypeScript Class exported as a UMD module with strict mode

有没有办法可以将 TypeScript class 导出为启用严格模式的 UMD 模块? "gotcha" 是严格模式部分。

我的代码类似于:

class Foo {
    bar(): Foo.Bam {}
}

namespace Foo {
    export function boom() {}
    export interface Bam {}
}

export = Foo;

该模块可以在其他地方使用,如:

import * as Foo from 'my-module';

var foo = new Foo();
foo.bar()

Foo.boom();

interface Kaboom extends Foo.Bam {}

我希望严格模式适用于所有 Foo,但不是整个脚本,因为它可能与其他未知脚本连接。

定义文件也正在生成中。

我可以在构建过程中将所有内容包装在一个闭包中,但我首先要寻找预编译解决方案。

编辑:

为我的问题添加了更多详细信息,以防万一将来有人找到方法。

我最后只是添加了一个简单的 post-compile 修复。 UMD模块生成后。我将这一行替换为:

})(["require", "exports"], function (require, exports) {

这一行:

})(["require", "exports"], function (require, exports) {"use strict";

现在模块内的一切都是严格的,而脚本本身不是。

如果您以标准方式使用模块(即根据需要加载它们),您可以将其添加到文件顶部 - 该语句将限定在文件范围内。

"use strict"

class Foo {
    bar() {}
}

namespace Foo {
    export function bar() {}
}

export = Foo;

如果您实际上是将输出合并到一个文件中,则不能在不引入名称空间的情况下限制语句的范围(另外:我不喜欢内部模块/名称空间)。

namespace Example {
    "use strict"

    export class Foo {
        bar() {}
    }
}

namespace Foo {
    export function bar() {}
}

export = Example.Foo;

这是一个已解决的问题。参见 Change prologue emit location to inside module IIFEs