如何为单行代码禁用TypeScript的noImplicitAny编译规则
问题原因
你之前的注释不生效的核心原因是:// tslint:disable-next-line 是针对已废弃的TSLint校验规则的禁用语法,而你遇到的TS7053是TypeScript编译器原生的类型校验报错,不属于TSLint规则范畴,因此无法通过TSLint注释禁用。
单行禁用规则的实现方案
要针对单行关闭该类型校验,有两种可选注释:
- 推荐使用
// @ts-expect-error:该注释会告知TypeScript编译器,下一行代码预期存在类型错误,直接跳过校验。如果后续代码修复后不再存在类型错误,编译器会反向提示你删除该冗余注释,更易维护。 - 也可以使用
// @ts-ignore:直接强制跳过下一行的所有类型校验,不会做后续的冗余提示。
修改后的代码示例:
const mockElement = () => ({ mount: jest.fn(), destroy: jest.fn(), on: jest.fn(), update: jest.fn(), }); const mockElements = () => { const elements = {}; return { create: jest.fn((type) => { // @ts-expect-error 临时关闭noImplicitAny校验 elements[type] = mockElement(); // @ts-expect-error 临时关闭noImplicitAny校验 return elements[type]; }), getElement: jest.fn((type) => { // @ts-expect-error 临时关闭noImplicitAny校验 return elements[type] || null; }), }; };
更推荐的无禁用优化方案
相比直接禁用校验,更推荐通过补全类型定义从根源解决报错,不会破坏全局的类型校验逻辑:
const mockElement = () => ({ mount: jest.fn(), destroy: jest.fn(), on: jest.fn(), update: jest.fn(), }); // 定义mock元素的类型 type MockElement = ReturnType<typeof mockElement>; const mockElements = () => { // 给elements明确声明索引类型 const elements: Record<string | number, MockElement> = {}; return { // 给type参数明确声明类型 create: jest.fn((type: string | number) => { elements[type] = mockElement(); return elements[type]; }), // 给type参数明确声明类型 getElement: jest.fn((type: string | number) => { return elements[type] || null; }), }; };
内容的提问来源于stack exchange,提问作者Ayesh Weerasinghe
相关产品推荐
相关产品推荐

