为什么tslint会删除对象键?

时间:2019-10-30 11:15:57

标签: angular typescript lint tslint

我开始在TypeScript项目上使用tslint。当我查看了被删除的资源时,我发现有时从对象中删除了键。

我在本地进行了生产构建,未显示任何错误。这怎么可能?我在网上找不到有关此行为的信息。

之前:

this.streamsDataModelDistance = new SimpleStreamsDataModel({
            polylineValueModels: polylineValueModels,
            fields: this.settingsModel.fields,
            commuters: distanceCommuters
        });

之后:

this.streamsDataModelDistance = new SimpleStreamsDataModel({
            polylineValueModels,
            fields: this.settingsModel.fields,
            commuters: distanceCommuters
        });

请注意缺少键“ polylineValueModels”。

这怎么甚至可以毫无错误地编译为JavaScript?我不愿意将它检入后备箱。

2 个答案:

答案 0 :(得分:3)

您刚刚启用了object-literal-shorthand规则,可以在tslint.json文件中进行设置。

{
 "rules": {
    "object-literal-shorthand": false
  }
}

https://palantir.github.io/tslint/rules/object-literal-shorthand/

这不是错误,它是ECMAScript 2015的标准语法。

  

在ECMAScript 2015中,可以使用速记符号,因此不再需要关键字“功能”。

// Shorthand property names (ES2015)
var a = 'foo', b = 42, c = {};
var o = {a, b, c};

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer

答案 1 :(得分:-1)

这很好,很方便。

如果属性与变量名称相同,则TypeScript可以轻松分配对象属性。

const foo = "bar";
const object =  {
   foo
}

将创建一个包含以下内容的对象:

{
    foo: "bar"
}