TypeScript 禁止 With 语句

Fen*_*ton 3 typescript

TypeScript 不允许with来自 JavaScript 的语句。

var radius = 12;
with (Math) {
    var area = PI * radius * radius;
}
Run Code Online (Sandbox Code Playgroud)

解释是 ECMAscript 5 中的“严格模式”不允许这样做。

这只是with声明 - 还是“严格模式”不允许的任何内容在 TypeScript 中也不允许?

C S*_*ver 5

TypeScript 确实允许该with语句,因为不这样做会违反它作为 JavaScript 超集的规定。然而,编译器会发出错误(尽管仍然编译并输出代码),因为除了运行时之外,任何东西都无法知道语句引用的内容with,这完全违背了静态类型的目的,所以你\xe2\x80\x99 不应该在 TypeScript 程序中使用它。TypeScript 论坛上有\xe2\x80\x99s 的附加讨论对此进行了额外讨论。

\n\n

关于 TypeScript 中不允许的其他严格模式,因为 TypeScript 尝试遵循 ES6 规范来实现其新功能,并且 ES6 规范 (\xc2\xa710.2.1) 表示 \xe2\x80\x9cModule 代码始终是严格代码。\xe2\x80\x9d 和 \xe2\x80\x9cA ClassDeclaration 或 ClassExpression 始终是严格代码。\xe2\x80\x9d,您可能会发现几乎所有 TypeScript 代码都需要符合严格模式即使不是今天,也会在未来的某个时刻。

\n

  • 它实际上不允许这样做——它会发出一个错误,并且规范说“在 TypeScript 中使用‘with’语句是一个错误。” - 一如既往,即使存在错误,编译器也会尝试为您提供代码。不过,感谢 ES6 参考 - TypeScript 似乎确实会与这些定义保持一致。 (2认同)