Tslint: Linter forcing me not to declare a Type in valid Typescript code

Created on 26 Oct 2016  路  4Comments  路  Source: palantir/tslint

Bug Report

  • TSLint version: 3.15.1
  • TypeScript version: 2.0.3
  • Running TSLint via: Node.js in the package.json file as a script

    TypeScript code being linted

let myBool: boolean = true;

with tslint.json configuration:

{
  "rules": {
    "class-name": true,
    "comment-format": [
      true,
      "check-space"
    ],
    "curly": true,
    "eofline": true,
    "forin": true,
    "indent": [
      true,
      "spaces"
    ],
    "label-position": true,
    "label-undefined": true,
    "max-line-length": [
      true,
      140
    ],
    "member-access": false,
    "member-ordering": [
      true,
      "static-before-instance",
      "variables-before-functions"
    ],
    "no-arg": true,
    "no-bitwise": true,
    "no-console": [
      true,
      "debug",
      "info",
      "time",
      "timeEnd",
      "trace"
    ],
    "no-construct": true,
    "no-debugger": true,
    "no-duplicate-key": true,
    "no-duplicate-variable": true,
    "no-empty": false,
    "no-eval": true,
    "no-inferrable-types": true,
    "no-shadowed-variable": true,
    "no-string-literal": false,
    "no-switch-case-fall-through": true,
    "no-trailing-whitespace": true,
    "no-unused-expression": true,
    "no-unused-variable": true,
    "no-unreachable": true,
    "no-use-before-declare": true,
    "no-var-keyword": true,
    "object-literal-sort-keys": false,
    "one-line": [
      true,
      "check-open-brace",
      "check-catch",
      "check-else",
      "check-whitespace"
    ],
    "quotemark": [
      true,
      "single"
    ],
    "radix": true,
    "semicolon": [
      "always"
    ],
    "triple-equals": [
      true,
      "allow-null-check"
    ],
    "typedef-whitespace": [
      true,
      {
        "call-signature": "nospace",
        "index-signature": "nospace",
        "parameter": "nospace",
        "property-declaration": "nospace",
        "variable-declaration": "nospace"
      }
    ],
    "variable-name": false,
    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-separator",
      "check-type"
    ]
  }
}

Actual behavior

When I have the following Typescript line in a test spec:

let myBool: boolean = true;

the linter complains with:

(no-inferrable-types) app/app.component.spec.ts[39, 17]: LHS type (boolean) inferred by RHS expression, remove type annotation

So I change the code to read:

let myBool = true;

and the error goes away.

Why is this? Shouldn't I be able to write valid Typescript in a spec?

Note this problem does not occur in a regular Typescript class. My spec file seems to transpile just fine.

This doesn't mean to be a nit-picking question: I am just curious.
Thanks.

Most helpful comment

There is no-inferrable-types in your tslint.json which warns you about such cases with primitives (number, string, boolean).
Just remove it from your configuration ant there will be no warnings.

To make sure that definitions are required you can check typedef rule and add it to your tslint.json

All 4 comments

There is no-inferrable-types in your tslint.json which warns you about such cases with primitives (number, string, boolean).
Just remove it from your configuration ant there will be no warnings.

To make sure that definitions are required you can check typedef rule and add it to your tslint.json

@IllusionMH Thank-you

That REALLY should NOT be a default.

number, string, boolean

There is no-inferrable-types in your tslint.json which warns you about such cases with primitives (number, string, boolean).
Just remove it from your configuration ant there will be no warnings.

To make sure that definitions are required you can check typedef rule and add it to your tslint.json

Just courious to check, if [no-inferrable-types] is removed then it will not warn not only for boolean but also for number, string. Will it be feasible solution?

Was this page helpful?
0 / 5 - 0 ratings