TSLint为何移除对象键?本地生产构建无报错原因咨询
为什么对象键被TSLint移除后仍能正常编译?
别担心,这完全是正常现象,背后是ES6(ECMAScript 2015)引入的对象字面量简写语法,TypeScript对这个特性提供了完整支持,所以编译不会报错,下面给你详细说清楚:
1. 简写语法的本质
当你在对象字面量里写{ key: key }的时候,如果键名和赋值的变量名完全一致,ES6允许你直接简写为{ key }——这两种写法在功能上完全等价,编译后的JavaScript代码也是一模一样的。
拿你的代码举例:
// 格式化前的完整写法 this.streamsDataModelDistance = new SimpleStreamsDataModel({ polylineValueModels: polylineValueModels, fields: this.settingsModel.fields, commuters: distanceCommuters }); // TSLint格式化后的简写写法 this.streamsDataModelDistance = new SimpleStreamsDataModel({ polylineValueModels, fields: this.settingsModel.fields, commuters: distanceCommuters });
编译后都会生成相同的JavaScript代码,所以编译器完全能识别,不会抛出任何错误。
2. TSLint自动格式化的原因
这是因为你的TSLint配置中启用了object-literal-shorthand规则(或者类似的代码风格规则)。这个规则的设计目的就是减少代码冗余,自动把符合条件的键值对转换成简写形式,是很多主流代码风格指南(比如Airbnb JavaScript规范)推荐的写法。
3. 关于提交到主干分支的建议
完全可以放心提交!这种简写形式是社区广泛接受的规范写法,和原代码没有任何功能差异。
如果你实在不习惯这个自动格式化行为,可以修改TSLint配置文件,把object-literal-shorthand规则设置为off或者never,这样TSLint就不会再自动移除键名了。
内容的提问来源于stack exchange,提问作者porta.nigra
相关产品推荐
相关产品推荐

