Javascript ECMAScript 6或7中是否支持静态类型?
ECMAScript 6中是否支持静态类型?ECMAScript 7怎么样?否 但在ECMA脚本维基页面上有一段关于ECMA脚本7的更改: 第七版正处于开发的早期阶段,但旨在继续ES6中的语言改革、代码隔离、效果控制和库/工具启用等主题。提出的新功能包括承诺/并发、数字和数学增强、保护和商标(静态类型的替代)、运算符重载、值类型(一类数字类对象)、新的记录结构(记录、元组和类型数组)、模式匹配和特征Javascript ECMAScript 6或7中是否支持静态类型?,javascript,ecmascript-6,static-typing,ecmascript-2016,Javascript,Ecmascript 6,Static Typing,Ecmascript 2016,ECMAScript 6中是否支持静态类型?ECMAScript 7怎么样?否 但在ECMA脚本维基页面上有一段关于ECMA脚本7的更改: 第七版正处于开发的早期阶段,但旨在继续ES6中的语言改革、代码隔离、效果控制和库/工具启用等主题。提出的新功能包括承诺/并发、数字和数学增强、保护和商标(静态类型的替代)、运算符重载、值类型(一类数字类对象)、新的记录结构(记录、元组和类型数组)、模式匹配和特征 这可能会引起您的兴趣。虽然它不是纯ES6,但Google的AtScript使用类型注释扩展ES6
这可能会引起您的兴趣。虽然它不是纯ES6,但Google的AtScript使用类型注释扩展ES6,并在编译器公开后编译成有效的ES6代码:虽然这不是ES6规范的一部分,但在使用高级编译级别时,在JavaScript代码中强制执行JSDoc参数类型注释。类型注释是使用注释指定的,因此在开发过程中会忽略它们,但当您为生产版本构建应用程序时,类型不匹配将导致编译器警告或编译器错误(可选) 强制JSDoc类型注释的示例:
/**
* @param {string} stringValue
* @return {number}
*/
function toInt(stringValue) {
return parseInt(stringValue, 10);
}
var val = toInt("10"); // Good
var val = toInt(false); // NaN in development, but throws an error (optional)
// or prints a warning (default) at build time
另外,JSDoc还可以使用相同的语法构建API文档。因此,如果您记录代码,它也很方便
但有一个警告:为了让闭包编译器发挥其高级优化魔力,项目中的每个工程师都必须遵循某些严格的编码约定。编译器无法强制类型,除非它能够可靠地找出代码在做什么,这意味着放弃一些JavaScript的动态和松散的语法。如果你不遵循它们,错误可能会潜入你的应用程序,而且事后很难诊断。大多数流行的JavaScript框架和库都不遵循它们,尽管有时您可以使用编译器的externs特性来解决这个问题。(例如,jQuery支持使用外部程序。)
所以,如果你真的使用它,请确保彻底测试你的应用程序。我个人甚至不考虑在Web应用程序上使用这个功能,除非它有一个詹金斯构建的BOT和近100%的自动化测试覆盖率,它可以在代码被优化之后运行。这是一个很大的工作,不是每个人都可以;我花了几个月的时间才把我的一个项目提升到这个水平。但就我个人而言,我认为这是值得努力的
有关更多信息,请查看和。否,ECMAScript 6(ES2015)中都不支持静态键入 至于ECMAScript 7(ES2016),没有任何关于静态类型的提案 我在邮件列表中看到了一些关于静态键入的建议/想法,但实际上没有一个是针对ES7(ES2016)提出的
如果您现在想要静态键入,您可能最好查看TypeScript或Flow。作为一个选项,您可以查看EsLint插件
它不是静态检查,而是可选的。TypeLint的好处是使用现有的应用程序数据自动构建和使用类型,而不像TypeScript或Flow那样,您必须自己描述复杂类型。类似地,这可能比AtScript更常见。AtScript现在只是typescript——守卫和商标似乎不在atm的路线图上;类型/类型注释可能是类型检查的唯一功能: