You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决@typescript-eslint/no-unsafe-assignment报错及禁用该规则?

问题:Jest HTTP测试触发@typescript-eslint/no-unsafe-assignment错误的解决方法

我编写了一个使用Jest的HTTP测试,用于验证echo函数的成功输出,测试代码如下:

describe('HTTP tests using Jest', () => {
  test('Test successful echo', () => {
    const res = request(
      'GET',
            `${url}:${port}/echo`,
            {
              qs: {
                echo: 'Hello',
              }
            }
    );

    const bodyObj = JSON.parse(res.body as string);
    expect(res.statusCode).toBe(OK);
    expect(bodyObj).toEqual('Hello');
  });
});

执行lint检查时,const bodyObj = JSON.parse(res.body as string);这一行触发了@typescript-eslint/no-unsafe-assignment错误。请问能否完全忽略该规则?该如何解决此问题?


回答

能否完全忽略该规则?

不建议完全忽略@typescript-eslint/no-unsafe-assignment规则。这个规则的核心作用是拦截类型不确定的值赋值操作,避免因类型不明确导致的潜在bug。全局关闭会削弱Typescript的类型校验能力,得不偿失。

解决方法

方法1:为JSON.parse结果指定明确类型断言

JSON.parse默认返回unknown类型,Typescript无法推断其具体类型,因此触发错误。直接给解析结果指定类型即可:

const bodyObj = JSON.parse(res.body as string) as string;

这种方式既满足类型校验要求,又保留了规则的防护作用。

方法2:为request返回值定义类型约束

如果使用的HTTP请求工具(比如自定义request函数)没有自带类型声明,可以手动定义接口约束返回结果:

interface RequestResponse {
  statusCode: number;
  body: string;
}

const res = request(
  'GET',
  `${url}:${port}/echo`,
  { qs: { echo: 'Hello' } }
) as RequestResponse;

const bodyObj = JSON.parse(res.body) as string;

通过明确res.body的类型为字符串,后续解析操作就不会触发不安全赋值警告。

方法3:局部禁用规则(仅特殊场景使用)

如果确实有特殊情况需要跳过当前行的校验,可以通过注释局部禁用规则,避免全局关闭带来的风险:

// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const bodyObj = JSON.parse(res.body as string);

内容的提问来源于stack exchange,提问作者FreeAntiVirus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:42:51