在 TypeScript 中禁用文件或行的类型检查

目录

Disable type checking for JavaScript files in TypeScript

  1. 在 TypeScript 中禁用对整个文件的类型检查
  2. 在 TypeScript 中禁用一行的类型检查
  3. 在 TypeScript 中禁用 JavaScript 文件的类型检查
  4. 在 TypeScript 中禁用 node_modules 的类型检查

在 TypeScript 中禁用对整个文件的类型检查

使用// @ts-nocheck注释禁用 TypeScript 中整个文件的类型检查。

注释// @ts-nocheck指示 TypeScript 在类型检查时跳过文件。

如果您使用 linter,您可能需要在注释行中禁用它。

索引.ts
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck console.log('no errors' / 0); console.log('no errors' / 0);

如果您需要在 TypeScript 中禁用 JavaScript 文件的类型检查,请向下滚动到下一个子标题。

@ts-nocheck注释

禁用对整个文件的类型检查。

评论// @ts-nocheck必须放在文件的顶部。

如果你使用 linter,你可能有一个规则禁止在你的代码中使用 ts 注释。该示例显示了如何禁用ban-ts-comment一行的规则。

在 TypeScript 中禁用一行的类型检查

使用// @ts-ignore注释禁用 TypeScript 中一行的类型检查。

索引.ts
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore console.log('no error' / 0);

// @ts-ignore注释禁用对下一行的所有类型检查。

请注意,我还添加了 Eslint 注释以禁用禁止在代码中使用 ts 注释的规则。如果您没有启用此规则或不使用 Eslint,则可能不必执行此操作。

您可能还会看到

用于禁用下一行类型检查的
@ts-expect-error注释。

索引.ts
// 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
是不必要的。

索引.ts
// 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如果下一行没有错误则不会提醒我们。

何时使用// @ts-expect-error注释的一个示例是,当您有一个函数接受特定类型的参数,但您想要测试它在传递不同类型的参数时是否按预期工作。

索引.ts
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'); }

sum示例中的函数采用 2 个数字作为参数,但我们想测试在传递不同类型的参数时它是否按预期工作

如果我们不使用// @ts-expect-error注释,我们会得到类型检查错误,因为该函数需要数字参数。

使用这种方法,我们可以测试我们的函数,如果注释是不必要的,则会出现 TypeScript 错误// @ts-expect-error

在 TypeScript 中禁用 JavaScript 文件的类型检查

使用// @ts-nocheck注释禁用 TypeScript 文件中的所有类型检查。

索引.ts
// 👇️ ts-nocheck disables type checking for the entire file // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck // 👇️ ts-ignore ignores any ts errors on the next line // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore function multiply(a, b) { return a * b; }

@ts-nocheck注释

禁用对整个文件的类型检查。

如果您使用 linter,则可能必须禁用ban-ts-comment 上一行中的规则。

如果需要禁用 JavaScript 文件的所有类型检查,则必须
tsconfig.json文件中设置
checkJs选项false

tsconfig.json文件
{ "compilerOptions": { "allowJs": true, "checkJs": false, // ... your other options } }

allowJs选项允许您在 TypeScript 项目中导入 JavaScript 文件。

默认情况下,您只能导入带有.ts扩展名的文件,但启用后,您还可以在您的 TypeScript 文件中导入和文件。 .tsxallowJs.js.jsx

启用该checkJs选项后,将在项目中的所有 JavaScript 文件中报告错误。

设置checkJsfalse禁用 TypeScript 项目中 JavaScript 文件的所有错误报告,但您仍然可以导入和使用您的 Javascript 文件,因为该allowJs 选项设置为true

如果只想禁用单行的类型检查,可以使用注释
// @ts-ignore

索引.ts
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore function multiply(a, b) { return a * b; }

// @ts-ignore注释禁用下一行的所有类型检查错误。

如果您使用 linter,您可能必须为您使用的行禁用它,@ts-ignore因为大多数 linter 都有禁止使用 ts 注释的规则。

在 TypeScript 中禁用 node_modules 的类型检查

node_modules要在 TypeScript 中
禁用类型检查,请在您的文件中将
skipLibCheck属性设置为truetsconfig.json

打开您的tsconfig.json文件并将skipLibCheck属性设置为true.

tsconfig.json文件
{ "compilerOptions": { "skipLibCheck": true, // ... other settings } }

skipLibCheck选项指示 TypeScript 编译器跳过声明 ( .d.ts) 文件的类型检查。

--skipLibCheck您可以通过在使用命令行时传递标志来获得相同的结果。

tsc --skipLibCheck

确保node-modules在你的exclude数组中

如果错误未解决,请确保文件exclude中的数组
tsconfig.json包含目录路径node_modules

tsconfig.json文件
{ "compilerOptions": { "skipLibCheck": true, // ... other settings }, "include": ["src/**/*"], "exclude": ["node_modules"] }

确保您使用的是
最新版本的 TypeScript
,因为该
skipLibCheck选项在某些旧版本中不起作用。

当该skipLibCheck选项设置为false时,当您的目录中存在库类型的多个副本时,您经常会遇到问题node_modules

也可能是两个库以不一致的方式定义了相同类型的副本。

skipLibCheck设置为 时true,您通常会在编译期间节省时间。

即使该设置禁用了d.ts文件的类型检查,TypeScript 仍会对您在应用程序源代码中具体引用的代码进行类型检查。