禁用类型检查
CRA使用Babel编译器
Babel https://babeljs.io是 Flow、JSX 和 TypeScript 组合的第三方编译器。巴别塔不实现类型检查,CRA 使用 TypeScript Compiler 中的一些方法和 TSLint 中的一些方法。因此,即使存在类型错误,Babel 也可以编译代码,因为 Babel 看不到它。将其添加到环境中:TSC_COMPILE_ON_ERROR=true
欲了解更多详细信息,请参阅加拿大税务局 (CRA) 文档 https://create-react-app.dev/docs/advanced-configuration/#
一个文件禁用
Use // @ts-nocheck
or /* tslint:disable */
(取决于 CRA 的版本)位于文件的开头。
避免使用类型和使用any
type
此外,在 TypeScript 中,以这种方式定义的类型可能是可选的。所以如果在tsconfig.json中使用则无法使用
{
"compilerOptions": {
///...
"strict": false
}
}
由于您遇到的最大痛苦似乎是查找外部库的类型定义,因此您可以为您不想进行类型检查的任何变量创建环境定义:
declare var variableName: any;
// better in .d.ts files
例如,对于 jQuery 来说,它是declare var $: any;
。然后你可以这样做:$("#test").myNonExistentFunction();
如果你愿意的话。
或者,当使用 es2015 模块时,可以执行以下代码来允许导入库:
declare module "jquery" {
var _temp: any;
export = _temp;
}
速记环境模块声明 (TS 2.0+)
在 TS 2.0+ 中,禁用导入类型检查的更好方法是创建一个.d.ts
在您的项目中创建文件并定义速记环境模块声明:
declare module "jquery";
// or use a wildcard
declare module "express-*"; // or use "*" to allow everything
这将允许您自由使用这些导入而无需类型检查:
import $ from "jquery";
$.something(); // ok at compile time, but will be an error at runtime
也就是说,在这种情况下采取的最佳路径是.d.ts
在您的项目中创建一个文件,以根据您使用的内容逐步定义您所依赖的库的接口。
ts-忽略评论(TS 2.6+)
可以通过使用禁用任何 TypeScript 错误// @ts-ignore
TypeScript 2.6+ 中的注释。例如:
if (false) {
// @ts-ignore: Unreachable code error
console.log("hello");
}
@ts-expect-error
评论(TS 3.9)期待错误比忽略错误更好、更安全、更稳定。请注意,它适用于下一个code行,这意味着您可以在代码和之间使用注释@ts-expect-error
.
// @ts-expect-error
/* I will override error */
//
var num: string = 3;
没有不同?尝试使用这个规则:
Pick ts-expect-error
if:
- 您正在编写测试代码,您实际上希望类型系统在操作时出错
- 您期望修复很快就会出现,并且您只需要一个快速的解决方法
- 您所在的项目规模相当大,团队积极主动,希望在受影响的代码再次有效后立即删除抑制评论
Pick ts-ignore
if:
- 您有一个更大的项目,并且代码中出现了新的错误,并且没有明确的所有者
- 您正在两个不同版本的 TypeScript 之间进行升级,并且一个版本中有一行代码错误,而另一个版本则没有。
- 老实说,您没有时间来决定哪个选项更好。
资料来源:https://stackoverflow.com/a/31089657/14724418 https://stackoverflow.com/a/31089657/14724418, https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html