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。
有没有办法可以将 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。