Tslint: 警告:'no-unused-variable' 规则需要类型检查消息...

创建于 2017-06-16  ·  46评论  ·  资料来源: palantir/tslint

错误报告

使用tslint.json配置:

{
  "rulesDirectory": [
    "node_modules/codelyzer"
  ],
  "rules": {
    "arrow-return-shorthand": true,
    "callable-types": true,
    "class-name": true,
    "comment-format": [
      true,
      "check-space"
    ],
    "curly": true,
    "eofline": true,
    "forin": true,
    "import-blacklist": [
      true,
      "rxjs"
    ],
    "import-spacing": true,
    "indent": [
      true,
      "spaces"
    ],
    "interface-over-type-literal": true,
    "label-position": true,
    "max-line-length": [
      true,
      140
    ],
    "member-access": false,
    "member-ordering": [
      true,
      {
        "order": [
          "public-static-field",
          "protected-static-field",
          "public-static-method",
          "protected-static-method"
        ]
      }
    ],
    "no-arg": true,
    "no-bitwise": true,
    "no-console": [
      true,
      "debug",
      "info",
      "time",
      "timeEnd",
      "trace"
    ],
    "no-construct": true,
    "no-debugger": true,
    "no-duplicate-super": true,
    "no-empty": false,
    "no-empty-interface": true,
    "no-eval": true,
    "no-inferrable-types": [
      true,
      "ignore-params"
    ],
    "no-unused-variable": true,
    "no-misused-new": true,
    "no-non-null-assertion": true,
    "no-shadowed-variable": true,
    "no-string-literal": false,
    "no-string-throw": true,
    "no-switch-case-fall-through": true,
    "no-trailing-whitespace": true,
    "no-unnecessary-initializer": true,
    "no-unused-expression": true,
    "no-var-keyword": true,
    "object-literal-sort-keys": false,
    "one-line": [
      true,
      "check-open-brace",
      "check-catch",
      "check-else",
      "check-whitespace"
    ],
    "prefer-const": true,
    "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"
      }
    ],
    "typeof-compare": true,
    "unified-signatures": true,
    "variable-name": false,
    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-separator",
      "check-type"
    ],
    "directive-selector": [
      true,
      "attribute",
      "app",
      "camelCase"
    ],
    "component-selector": [
      true,
      "element",
      "app",
      "kebab-case"
    ],
    "use-input-property-decorator": true,
    "use-output-property-decorator": true,
    "use-host-property-decorator": true,
    "no-input-rename": true,
    "no-output-rename": true,
    "use-life-cycle-interface": true,
    "use-pipe-transform-interface": true,
    "component-class-suffix": true,
    "directive-class-suffix": true,
    "no-access-missing-member": true,
    "templates-use-public": true,
    "invoke-injectable": true
  }
}

我到底做错了什么?

  • __TSLint 版本__:5.4.3
  • __打字稿版本__:2.3.4
  • __通过__运行TSLint:纱线和命令行

实际行为

使用以下参数运行tslint时:

tslint --type-check --project tsconfig.json  src/**/*.ts

我收到以下警告:

Could not find implementations for the following rules specified in the configuration:
    Warning: The 'no-unused-variable' rule requires type checking
Try upgrading TSLint and/or ensuring that you have all necessary custom rules installed.
If TSLint was recently upgraded, you may have old rules configured which need to be cleaned up.

预期行为

根据tslint文档进行类型检查,我需要做的就是传入--type-check --project tsconfig.json但它似乎不起作用。

Question

最有用的评论

如果您查看 VSCode 1.19 自述文件,则有一项新功能可以将此规则和其他规则视为警告。
对我们来说,这意味着:

  • tslint.json删除"no-unused-variable" tslint.json
  • "noUnusedLocals"到我们的tsconfig.json

其他规则留给读者练习;-)

请注意,tslint 是此扩展,而 tsconfig 是 VSCode 内置行为。

所有46条评论

请填写问题模板。 你的 tslint.json 是什么样的?

我在家并尝试了相同的项目并且它工作正常。 我将保持开放状态,直到我周一上班再次测试。 可能只需要重新安装我的节点模块。

我也更新为使用问题模板。

在 tslint 更新后的某个时间(可能是 v4 -> v5),如果没有--type-check--project参数, no-unused-variable将不可用。

此选项难以使用,更新后需要很长时间才能打印结果,但重要且最常用的 linting 选项。 有没有办法在没有上层参数的情况下使用这个选项?

在 tslint 更新后的某个时候(可能是 v4 -> v5),如果没有 --type-check 和 --project 参数,no-unused-variable 将不可用。

我正在传递 --project 与tslint --type-check --project tsconfig.json src/**/*.ts

在我的家用电脑上我没有这个问题,但在我的工作电脑上我有。

@everedifice规则实现存在错误,我们几乎弃用了它(https://github.com/palantir/tslint/issues/1481),最终决定通过委托编译器的 no-unused-variable 实现来保留它(这解决了大多数错误)。 在这个 repo 中有很多关于它的讨论主题,我鼓励你查看,大部分链接来自做出重大更改的 PR ( https://github.com/palantir/tslint/pull/2235.

@mastrauckas如果没有关于两个不同环境之间差异的更多详细信息,我真的无法帮助您。

@adidahiya我昨晚也在第三台电脑上得到了这个,这台电脑也是 macOS。 我打算在家里的电脑上再试一次,看看它是否仍然发生。

一般来说:
计算机 1: Windows 10 完全是最新的,截至目前我没有收到error
计算机 2: macOS 完全更新,我得到了error
计算机 3: Windows 7 完全更新,我得到error

@everedifice我刚刚发布了一个新版本的tslint-consistent-codestyle和一个新规则no-unused ,它主要类似于no-unused-variable具有一些附加功能,但不需要使用--project --type-check .

如果您有兴趣,可以在此处找到文档: https :

我认为没有问题的计算机毕竟似乎有问题。 这是一个错误吗?

关于这个问题有什么新的吗?

我有同样的问题。

相同的问题,但都有“警告:‘无未使用的变量’规则需要类型信息。”
和“警告:'no-use-before-declare' 规则需要类型信息。” (我可以看到“信息”中的拼写错误在 5.5.0 和 5.7.0 版本之间得到了修复,但这是唯一改变的地方)。 我正在使用打字稿版本 2.4.1 运行它。 有关于这个问题的消息吗?

同样的问题在这里

此问题是否已解决或是否有任何临时修复停止显示警告。

我不认为它是固定的。 我什至不认为他们接受了一个问题。

永久修复,在 tsconfig.json 中使用no-unused-variable而不是 tslint.json。 如果编译器可以提供相同的功能,那么使用 linter 就没有任何意义。

@AnimaMundi确实提供了相同的功能,但是当将 tslint 作为我们 CI 过程的一部分运行时,这些需要在测试期间标记,而不是在构建期间标记。 我不同意这应该被忽略/删除,因为编译器在构建时这样做。

@haswalt我看不出有任何理由需要在 linting 阶段而不是构建阶段对其进行标记。 不管你同意与否,我与这个项目的开发无关。 我刚刚看到有人正在寻找修复程序并为他们提供了它。

@AnimaMundi的修复类似,我在noUnusedLocalsnoUnusedParameters 。 错误显示在我的“问题”窗格中。

@AnimaMundi @haswalt @keego在其他 TSLint 线程(https://github.com/palantir/tslint/issues/1481 和链接线程)中广泛讨论了 lint 规则与编译器检查未使用变量的优点; 这个问题并不是真正适合它的地方。

@adidahiya我的评论只是为了分享这个问题的修复,而不是对 linter 规则与编译器检查的优点进行评论。

服从编译器不会做同样的事情:编译器只有一个选项:失败。
tslint处理它的原因是它通常需要是一个警告(绿色波浪线与红色波浪线)。

tslint 问题不仅可以显示为警告,而且还可以一次性忽略,而 typescript 编译错误则不能

这些点都已经全部解决了(请参阅我的最后一条评论和链接的线程)。 现在没有什么能阻止您使用no-unused-variable作为 TSLint 规则。 我不确定这些后续评论试图达到什么目的。

@mastrauckas你对这条规则还有问题吗? --type-check标志已被弃用,但需要--project才能启用基于类型检查的规则。

旁白:使用TS 2.6 ,您可以使用// @ts-ignore来抑制编译器错误。

@adidahiya我只是在回应上面的评论,声称没有理由将其作为 lint 规则而不是编译器规则。

但你是对的,我猜相关问题是 vscode 扩展而不是 tslint 本身。 tbh 在这个话题上有很多问题,我花了一段时间才弄清楚为什么它不起作用以及在哪里。

欣赏小费。 一旦我们切换到 2.6,我将立即切换回使用编译器设置

对于那些声称这不应该是 lint 规则的人来说,还有一点:lint 警告可以修复,这是一个主要的候选者。

我在最新的 1.19 VS Code The 'no-unused-variable' rule requires type information收到了同样的警告(见下文)。 我的配置缺少什么吗?

{
  "extends": "tslint:recommended",
  "rules": {
    "linebreak-style": [true, "LF"],
    "quotemark": [true, "single", "avoid-escape", "avoid-template"],
    "no-console": false,
    "no-unused-expression": false,
    "ordered-imports": false,
    "member-access": [true, "no-public"],
    "object-literal-sort-keys": false,
    "curly": [true, "ignore-same-line"],
    "semicolon": [true, "never"],
    "no-var-requires": false,
    "no-unused-variable": true
  }
}

如果您查看 VSCode 1.19 自述文件,则有一项新功能可以将此规则和其他规则视为警告。
对我们来说,这意味着:

  • tslint.json删除"no-unused-variable" tslint.json
  • "noUnusedLocals"到我们的tsconfig.json

其他规则留给读者练习;-)

请注意,tslint 是此扩展,而 tsconfig 是 VSCode 内置行为。

我选择删除no-unused-variable因为 VS 1.19 似乎已经报告了这些。

我不明白 VSCode 与此有什么关系。 仅让 VSCode 将这些视为警告是不够的,我需要我的 webpack dev server watch build 不会因为它们而失败。 是否有no-unused-variable的替代品,独立于特定的编辑器,将

  • 在开发过程中被视为警告
  • CI 期间构建失败

?

@pelotom ,有几个人从 VSCode TSLint 扩展重定向到这里,例如从https://github.com/Microsoft/vscode-tslint/issues/219

到目前为止,TS 无法将一些问题显示为警告(绿色波浪线),但 lints(ESlint、TSLint)能够。 所以我们在问为什么 TSlint 不会将未使用的变量报告为警告。 但是从 1.19 开始,VSCode 的 TS 可以发出这些警告,我们正在退出这个问题😉

需要明确的是,我也使用 VSCode,也希望在编辑器中看到这些警告突出显示,但 VSCode 的设置似乎是错误的层,_configuring_ 编译器错误的严重性,因为它不会影响您的其余部分工具链。

我同意你的汤姆,并希望在编辑器和我们的构建/CI 程序都得到适当支持的地方找到解决方案。 到目前为止,我们已经看到了强烈的抵制(似乎是合理的),有些人(包括我)会采取我们今天所能做的,同时对真正的解决方案抱有希望。

如果您查看 VSCode 1.19 自述文件,则有一项新功能可以将此规则和其他规则视为警告。

@rnemec我认为您打算编写“发行说明”而不是“自述文件”。 我笨到去寻找自述文件。 对于到达这里的任何人,我们不妨引用相关内容:

VS Code 现在将 TypeScript 代码样式问题显示为警告而不是错误。 这适用于:

变量已声明但从未使用
属性已声明但从未读取其值
检测到无法访问的代码
未使用的标签
掉入开关中的外壳
并非所有代码路径都返回值
将这些视为警告与其他工具(例如 TSLint)一致。 当您从命令行运行 tsc 时,这些仍将显示为错误。

您可以通过设置禁用此行为:“typescript.reportStyleChecksAsWarnings”:false。

所以这是一个临时解决方案,仅在使用 VSCode 时有效。 如果警告留在那里,任何其他直接使用tsc构建工具都不会编译代码。 我有一些同事正在使用 Atom,因此如果我进行了更改并忽略了其中一个警告,他们将无法编译代码。 对?

我不太明白这是如何解决任何问题的。 如果编译器仍然将它们视为错误,那么将这些内容显示为警告有什么用?

如果我理解正确,长期解决方案是在tsc添加一个标志来强制执行相同的行为(使其编译时带有警告),或者完全删除这些编译器检查?

- - 编辑 - -
我没有通读之前的所有评论。 @pelotom已经提出了同样的观点。

如果您希望 lint 检查在开发模式与 CI 模式下具有不同的严重性,您可以使用多个 tslint.json 配置来执行此操作,其中一个extends另一个。 #2569 需要修复以使此处的 UX 良好,以便您可以仅使用一个defaultSeverity配置行来切换严重性——它正在进行中。

@adidahiya正在讨论的是no-unused-variable lint 规则的所谓 _replacement_,使用tscnoUnusedLocals

@pelotom是的,我明白了——但我认为tsc还不支持这样的工作流程。 您可以有两个tsconfig.json文件,其中一个扩展另一个文件并分别禁用每个“非致命”编译器检查(在本例中noUnusedLocalsnoUnusedParameters ),但这不会不要让您在编辑器中将检查视为警告。

@adidahiya是的,这就是为什么它目前不是有效的替代品。 而且我更愿意看到no-unused-variable在 VSCode 中正常工作,而不是投入更多精力让noUnusedLocals表现得更像 lint 规则。 IMO 编译器首先尝试获取此类检查的所有权是错误的。

而且我更愿意看到 no-unused-variable 在 VSCode 中正常工作,而不是投入更多精力让 noUnusedLocals 表现得更像 lint 规则。

说得通。 我相信这个项目旨在做到这一点: https :

我说得太快了。 我们在https://github.com/palantir/tslint/issues/2649 上被阻止,因为该插件很有用。 改为跟踪该问题。

@adidahiya是的,我已经跟踪它很长一段时间了。

有这方面的消息吗? 它会被弃用吗?

@philip-firstorder 使用这个为我解决了这个问题--project tsconfig.json

tslint -c tslint.json --project tsconfig.json src/**/*.ts

现在不推荐使用 no-unused-variable,请参阅 #3918 和 #3919

🤖 哔哔! 👉 TSLint 已弃用👈,您应该切换到typescript-eslint ! 🤖

🔒 此问题已被锁定,以防止进一步不必要的讨论。 谢谢! 👋

此页面是否有帮助?
0 / 5 - 0 等级