TypeScript 禁止使用 With 语句

标签 typescript

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

var radius = 12;
with (Math) {
    var area = PI * radius * radius;
}

解释是它在 ECMAscript 5 的“严格模式”中是不允许的。

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

最佳答案

TypeScript 确实允许 with 语句,因为不这样做会违反它作为 JavaScript 超集的规定。然而,编译器将发出一个错误(尽管仍然编译并输出代码),因为除了在运行时之外,任何东西都无法知道从 with 语句中引用了什么,这完全失败了静态类型的目的,所以你不应该在 TypeScript 程序中使用它。有一个additional discussion on the TypeScript forum关于这个。

关于 TypeScript 中不允许的其他严格模式,因为 TypeScript 试图在它可以实现其新功能的地方遵循 ES6 规范,而 ES6 规范(§10.2.1)说“模块代码始终是严格代码。 ”和“ClassDeclaration 或 ClassExpression 始终是严格的代码。”,你可能会发现几乎所有的 TypeScript 代码在未来的某个时候都需要符合严格模式,如果不是今天的话。

关于TypeScript 禁止使用 With 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21067477/

相关文章:

angular - 请求表单 Angular 时,Spring Security Jwt Token 允许所有选项方法

angular - 让用户 : User = new User (. ...) 为什么这对我不起作用?

javascript - 使用 typescript 和 webpack 进行代码拆分

typescript - 如何在 Typescript 中将字符串变量转换为字符串文字类型

angular - 有没有办法检测用户何时导航到 Angular 中的另一个组件?

javascript - 导入语句在 typescript 中不起作用

javascript - 使用 TypeScript 在 React 组件之外调度 Redux Thunk 操作

javascript - TypeScript:如何无错误地访问 onChange 事件数据? (对象可能是 'null' )

Angular :ReferenceError: 'function' 未定义

javascript - 为什么这个 typescript 程序永远不会结束?