在ECMAScript 6中是否支持静态类型?ECMAScript 7怎么样?
没有.
但是在ECMA-Script Wikipage上有一段关于ECMA-Script 7的变化:
第七版处于发展的早期阶段,但旨在继续ES6的语言改革,代码隔离,效果控制和库/工具启用等主题.提出的新功能包括承诺/并发,数字和数学增强,警卫和商标(静态类型的替代),运算符重载,值类型(类一类数字对象),新记录结构(记录,元组和类型化数组) ,模式匹配和特征.
你可能会感兴趣.
虽然这不是ES6规范的一部分,但Closure Compiler在使用其高级编译级别时在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文档.因此,如果您记录代码,它也很方便.
但是警告:对于Closure Compiler进行高级优化魔术,项目中的每个工程师都必须遵循某些严格的编码约定.编译器不能强制执行类型,除非它能够可靠地弄清楚你的代码在做什么,这意味着放弃了一些JavaScript的动态和多余的语法.如果您不遵循它们,错误可能会蔓延到您的应用程序中,并且事后很难诊断它们.大多数流行的JavaScript框架和库都不遵循它们,尽管您有时可以使用Compiler的externs功能解决这个问题.(例如,使用externs支持jQuery.)
因此,如果您确实使用它,请确保彻底测试您的应用程序.我个人甚至不会考虑在Web应用程序上使用此功能,除非它有一个Jenkins构建机器人和接近100%的自动化测试覆盖率,可以在优化后对代码运行.这是很多工作,并不适合所有人; 我花了几个月才把我的一个项目升级到那个级别.但就个人而言,我认为值得付出努力.
有关更多信息,请查看Closure Compiler的Advanced Compilation and Externs和Annotating JavaScript.