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

Ton*_*alo 47 typescript visual-studio-code angular

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

serverId: number = 10;
Run Code Online (Sandbox Code Playgroud)

并给出以下消息:

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

当我删除"号码"类型时,消息就会消失.

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

Est*_*ask 46

这不是一个坏习惯,但是serverId: number = 10是多余的,因为在分配属性时number推断出类型.这是TSLint no-inferrable-types警告的:

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

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

这种方法最适用于noImplicitAny选项,因为这种方式不会错误地省略类型,因为它没有被推断.

  • 我认为它使代码更具可读性 (10认同)

小智 22

如上所述,它在技术上是多余的,可以被认为是混乱的.就个人而言,我并不关心这种观点,并且更倾向于同时具有各种特定的次要工作流原因的类型和价值,而我并不认为它是一种保证规则的杂乱程度.如果你想禁用它,这是如何.

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

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


Pau*_*erg 18

如果您因为tslint 已被弃用而来到这里寻找 eslint 解决方案,请将此规则添加到您的.eslintrc.js文件中:

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

Run Code Online (Sandbox Code Playgroud)

  • 感谢那。工作起来就像一个魅力。坦率地说,我觉得这甚至是一开始就很愚蠢。我正在使用 TypeScript;让我定义显式类型。如果我想要推断类型声明,我会使用 JavaScript,这是我想要避免的,因此我首先使用 TypeScript。 (9认同)
  • 谢谢。疯狂的是,你似乎是互联网上唯一知道这一点的人! (3认同)

Par*_*ain 13

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

要么只是初始化你的字符串:

serverId = 10;
Run Code Online (Sandbox Code Playgroud)

要么

serverId : number;
Run Code Online (Sandbox Code Playgroud)

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

no-inferrable-types : false
Run Code Online (Sandbox Code Playgroud)


Sul*_*han 5

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

  • 在这种情况下,你是正确的......但是,字符串和布尔值可能存在歧义......(也应该遵循良好的变量命名......) (3认同)