Tslint-简单地推断类型-为什么在此处包含该类型是一种不好的做法?


73

在VSCode中,当我添加以下类型的代码时,lint tslint会抱怨:

serverId: number = 10;

并给出以下消息:

[tslint]从数字文字中简单推断出的类型数字,删除类型注释(no-inferrable-types)

当我删除“数字”类型时,消息消失了。

为什么在此处包括类型信息是不好的做法?


4
palantir.github.io/tslint/rules/no-inferrable-types说:“可以由编译器轻松推断出的显式类型会使代码更加冗长。”
Blorgbeard将于

您说的越详细越好,这总是一件坏事,有时说的越详细越清楚。
埃里克·布朗-

Answers:


75

这不是一个坏习惯,但却serverId: number = 10是多余的,因为在分配属性时number推断类型。这是TSLintno-inferrable-types警告的内容:

编译器可以轻松推断出的显式类型使代码更加冗长。

除非serverId可以最初不定义属性,但以后再定义属性(例如在constructor函数中),否则number可以安全地将其省略。

这种方法与noImplicitAnyoption一起使用效果最佳,因为通过这种方式,没有机会因为没有推断出类型而将其错误地省略。


39

如上所述,它在技术上是多余的,可以被认为是混乱的。就我个人而言,我并不在乎这种观点,并且出于各种特定的次要工作流原因,更倾向于同时拥有类型和值,并且我不认为这是确保规则杂乱无章的水平。如果要禁用它,请按以下步骤操作。

  • 打开tslint.json
  • 找到“ no-inferrable-types”属性
  • 添加ignore-properties到其数组

相关的tslint文档 https://palantir.github.io/tslint/rules/no-inferrable-types/


22

此错误是由于您在tslint.json文件中进行的配置。

只需将变量初始化为

serverId = 10;

要么

serverId: number;

或者只是将no-inferrable-typestslint.json文件中的配置设置为

no-inferrable-types: false

8

如果由于不推荐使用tslint而来这里寻找eslint解决方案,请将此规则添加到.eslintrc.js文件中:

module.exports = {
  ...m
  rules: {
    ...,
    "@typescript-eslint/no-inferrable-types": "off",
    ...
  },
};


4
感谢那。像魅力一样工作。坦白说,我觉得这甚至是一件愚蠢的事情。我正在使用TypeScript;让我定义显式类型。如果我想推断类型声明,那么我将使用JavaScript,这是我要避免的事情,因此我首先使用TypeScript。
A. Cucci

2

不必要,它不提供任何新信息。基本上是说“ 10是数字”的评论。


3
在这种情况下,您是正确的...。但是,字符串和布尔值可能会含糊不清...(也应遵循良好的变量命名...)
Eddie B

2

现在可能对此很奇怪,但是我遇到了类似的错误,并且在我的角度应用程序的tslint.json文件中找不到“ no-inferrable-types”属性。我不知道为什么它最初没有生成,但是我不得不在这里插入

"rules": {
    **"no-inferrable-types": false,**
    "directive-selector": [
      true,
      "attribute",
      "app",
      "camelCase"
    ],

然后它就像一个魅力!

PS:这适用于可能和我一样遇到同样问题的人,或者我可能错了,因为在任何解决方案中都没有人提到必须在json文件中添加此内容。



0

tslint.json文件中添加或完成以下规则:

"no-inferrable-types": [
  true,
  "ignore-params",
  "ignore-properties"
]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.