Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ECMAScript 6或7中是否支持静态类型?_Javascript_Ecmascript 6_Static Typing_Ecmascript 2016 - Fatal编程技术网

Javascript ECMAScript 6或7中是否支持静态类型?

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

ECMAScript 6中是否支持静态类型?ECMAScript 7怎么样?

但在ECMA脚本维基页面上有一段关于ECMA脚本7的更改:

第七版正处于开发的早期阶段,但旨在继续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的路线图上;类型/类型注释可能是类型检查的唯一功能: