首页 > 解决方案 > create-react-app --template typescript — 是否可以暂时禁用类型检查?

问题描述

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

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

标签: typescriptcreate-react-apptsconfig

解决方案


禁用类型检查

CRA 使用 Babel 编译器

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

有关更多详细信息,请参阅CRA 文档

一个文件禁用

在文件开头使用// @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;
}

速记环境模块声明 (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+)

可以通过使用// @ts-ignoreTypeScript 2.6+ 中的注释来禁用任何 TypeScript 错误。例如:

if (false) {
    // @ts-ignore: Unreachable code error
    console.log("hello");
}

@ts-expect-error评论 (TS 3.9) 期望错误比忽略更好、更安全、更稳定。请注意,它适用于下一个代码行,这意味着您可以在代码和@ts-expect-error.

// @ts-expect-error
/* I will override error */
//
var num: string = 3;

没有不同?尝试使用以下规则:

选择ts-expect-error如果:

  • 您正在编写测试代码,您实际上希望类型系统在操作中出错
  • 您希望修复程序很快就会出现,您只需要一个快速的解决方法
  • 您在一个规模合理的项目中,有一个积极主动的团队希望在受影响的代码再次有效后立即删除抑制注释

选择ts-ignore如果:

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

来源:https : //stackoverflow.com/a/31089657/14724418,https: //www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html


推荐阅读