Tslint - 类型推断 - 为什么在这里包含类型是不好的做法?

时间:2017-10-17 21:54:56

标签: angular typescript visual-studio-code

在VSCode中,linter,tslint在我添加以下代码时抱怨,类型为:

serverId: number = 10;

并提供以下信息:

  

[tslint]从数字文字中简单推断的类型编号,删除   类型注释(不可推断的类型)

当我删除“号码”类型时,消息就会消失。

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

8 个答案:

答案 0 :(得分:37)

这不是一种不好的做法,但serverId: number = 10是多余的,因为number类型在分配属性时为inferred。这就是TSLint no-inferrable-types警告的内容:

  

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

除非serverId属性可能最初未定义但稍后定义(例如在constructor函数中),否则可以安全地省略number

这种方法最适合noImplicitAny选项,因为这样就不会错误地省略类型,因为它没有推断出来。

答案 1 :(得分:11)

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

  • 打开tslint.json
  • 找到“无法推断的类型”属性
  • ignore-properties添加到其数组

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

答案 2 :(得分:9)

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

要么只是将字符串初始化为:

serverId = 10;

serverId : number;

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

no-inferrable-types : false

答案 3 :(得分:8)

如果您是因为tslint is being deprecated而来这里寻求庇护解决方案,请将此规则添加到您的.eslintrc.js文件中:

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

答案 4 :(得分:2)

没有必要,它不提供任何新信息。它基本上是一个评论说" 10是一个数字"。

答案 5 :(得分:2)

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

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

然后它像一种魅力一样起作用!

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

答案 6 :(得分:1)

可以看作是噪音。输入非平凡部分更重要

答案 7 :(得分:0)

tslint.json 文件中的

添加或完成以下规则:

"no-inferrable-types": [
  true,
  "ignore-params",
  "ignore-properties"
]