【问题标题】:New eslint errors with the @typescript-eslint/no-unsafe-* rules带有 @typescript-eslint/no-unsafe-* 规则的新 eslint 错误
【发布时间】:2020-10-01 05:10:43
【问题描述】:

我在将它们添加到一些现有项目时遇到了一些问题。例如,我开发的模块中有一个类:

export default class ClassName {
  // Class members
}

现在我将它导入另一个项目:

import ClassName from 'modulename';

const object = new ClassName();

我在这条线上有 2 个错误。

const object 中的object

error  Unsafe assignment of an any value                @typescript-eslint/no-unsafe-assignment

newnew ClassName

error  Unsafe construction of an any type value         @typescript-eslint/no-unsafe-call

如何避免这些错误?!我真的很希望能够遵守这些规则,因为我认为它们非常有用!

谢谢。


这是另一个例子:

import { readJsonSync } from 'fs-extra';
const testEnv = readJsonSync(testEnvPath);

这里我在const testEnvtestEnv 上收到no-unsafe-assignment 错误,在第二行的readJsonSync 调用上出现no-unsafe-call 错误。

我可以用这段代码摆脱第一个:

interface ITestEnv {
  // interface members
}
const testEnv: ITestEnv = readJsonSync(testEnvPath) as ITestEnv;

但是,我仍然不知道如何在readJsonSync 通话中摆脱第二个。

【问题讨论】:

  • 我遇到了类似的问题。我的想法是在我的项目中使用 javascript,因为 typescript 带来了很多痛苦

标签: javascript typescript eslint typescript-eslint


【解决方案1】:

在第一种情况下,您只有一个来自构造函数的错误,它级联到 const 赋值。您的类实现中的某些内容正在将类型推断推断为any

并不是说您的代码不正确。可能是这样,但有一个 (open issue on Github) 报告构造函数被同一规则错误地标记。

在您的第二个问题上,您是否添加了@type/fs-extra 作为项目依赖项?许多 npm 包本身没有类型。类型由某人创建并添加到 @types 库。在这种情况下,@types/package_name 必须单独添加为依赖项。

【讨论】:

  • 确实,我有这个想法并添加了 @types/fs-extra 模块作为依赖项;它没有帮助。还有一个想法:肯定有模块没有定义类型,无论是在模块中还是在@types 系列中……那我们该怎么办?这个 eslint 规则会阻止我们在 typescript 项目中使用该模块吗?!
  • 如果类型不可用,我们总是可以编写自己的接口和类型并使用它们。如果我们希望编译器完成它的工作并检查所有内容,我们必须有类型。但是,当我们可能想要编辑规则以生成警告而不是错误时,当然可能会出现这种情况。类型检查是一种权衡:我们为了安全而放弃了便利。但最终由团队或开发人员决定 eslint 应该执行哪些规则。
  • 你为什么使用句子“你的类实现中的某些东西正在使类型推断被推断为任何。”在Something的一部分中?......究竟是什么让它发生?在我看来,这句话读起来有点模糊。
【解决方案2】:

ESlint 无法解析你的模块的绝对导入,
这使它可以将您的类类型推断为any

确保 ESlint 使用的 tsconfig.json 文件中的 baseUrlpaths 定义正确。

@见Typescript – Module Resolution

【讨论】:

  • 它没有帮助我:(
猜你喜欢
  • 1970-01-01
  • 2021-08-10
  • 2023-02-26
  • 2021-06-02
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
相关资源
最近更新 更多