如何解决@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
相关产品推荐
相关产品推荐

