1

有没有办法可以将 TypeScript 类导出为启用严格模式的 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,但不适用于整个脚本,因为它可能与其他未知脚本连接。

定义文件也在生成中。

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

编辑:

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

我最终只是添加了一个简单的编译后修复。UMD模块生成后。我替换这一行:

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

有了这条线:

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

现在模块内的所有内容都是严格的,而脚本本身则不是。

4

2 回答 2

1

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

"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;
于 2015-10-14T19:50:14.537 回答
0

这是一个固定的问题。请参阅将序言发射位置更改为模块 IIFEs 内部

于 2015-10-16T23:24:39.467 回答