create-react-app --template typescript — 是否可以暂时禁用类型检查?

create-react-app --template typescript — is it possible to temporarily disable type checking?

我正在使用 TypeScript 开发一个 create-react-app,它会在我的前端文件夹中自动生成一个 tsconfig "include": "/src" 每次我 运行 应用程序,即使我删除文件或更改它。

有没有办法在 TS cra 中禁用类型检查(不弹出)?

禁用类型检查

CRA 使用 Babel 编译器

Babel 是 Fl​​ow、JSX 和 TypeScript 的第三方编译器,结合了它。 Babel 没有实现类型检查,CRA 使用了一些来自 TypeScript Compiler 的方法和一些来自 TSLint 的方法。所以即使存在类型错误,Babel 也可以编译代码,因为 Babel 看不到它。将其添加到环境中: TSC_COMPILE_ON_ERROR=true

有关详细信息,请参阅 CRA documentation

一个文件禁用

在文件开头使用 // @ts-nocheck/* tslint:disable */(取决于 CRA 的版本)。

避免使用类型和使用 any 类型

此外,在 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;
}

Shorthand 环境模块声明 (TS 2.0+)

在 TS 2.0+ 中,禁用导入类型检查的更好方法是在项目中创建一个 .d.ts 文件并定义 shorthand 环境模块声明:

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 2.6+ 中使用 // @ts-ignore 注释来禁用任何 TypeScript 错误。例如:

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;

没有区别?尝试使用此规则:

选择 ts-expect-error 如果:

  • 您正在编写测试代码,您实际上希望类型系统在操作时出错
  • 您希望很快就能得到修复,而您只需要一个快速解决方法
  • 您所在的项目规模适中,团队积极主动,希望在受影响的代码再次有效时立即删除抑制评论

选择 ts-ignore 如果:

  • 你有一个更大的项目,代码中出现了新的错误,没有明确的所有者
  • 您正在两个不同版本的 TypeScript 之间升级,一个版本有一行代码错误,另一个版本没有。
  • 老实说,您没有时间决定哪个选项更好。

来源:, https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html