在 TypeScript 中禁用一行的类型检查
Disable type checking for a Line in TypeScript
使用// @ts-ignore
注释禁用 TypeScript 中一行的类型检查。该注释禁用了下一行的类型检查。如果您使用 linter,您可能需要为使用
// @ts-ignore
注释的行禁用它。
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore function logMessage(message) { console.log(message); return message; }
该// @ts-ignore
注释禁用对下一行的所有类型检查。
如果需要对整个文件禁用类型检查,可以使用
// @ts-nocheck
注释。
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck function logMessage(message) { console.log(message); return message; }
该// @ts-nocheck
注释指示 TypeScript 跳过对整个文件的类型检查。
您可能还会看到
@ts-expect-error
注释用于禁用下一行的类型检查。
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error console.log('hello world' / 0);
将// @ts-expect-error
抑制下一行的任何类型错误,但如果没有任何错误,TypeScript 将通知我们 using@ts-expect-error
是不必要的。
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error console.log('hello world' / 0); // ⛔️ Error: Unused '@ts-expect-error' directive.ts(2578) // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error console.log(100 * 100);
这是
ts-ignore 和 ts-expect-error 之间的主要区别——
// @ts-ignore
如果下一行没有错误则不会提醒我们。
An example of when you would use the // @ts-expect-error
comment is when you
have a function that takes a parameter of a specific type, but want to test that
it works as expected when passed a parameter of a different type.
function sum(a: number, b: number) { if (typeof a !== 'number' || typeof b !== 'number') { return 0; } return a + b; } // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error const result = sum('hello', 'world'); if (result === 0) { console.log('✅ Test passes'); }
The sum
function in the example takes 2 numbers as parameters, but we want to
test if it works as expected when passed parameters of a different type.
// @ts-expect-error
comment, we would get a type checking error, because the function expects number parameters.Using this approach, we can test our function and would get a TypeScript error
if the // @ts-expect-error
comment was unnecessary.