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

Kir*_*oss 6 typescript tsconfig create-react-app

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

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

Tom*_*bel 7

禁用类型检查

\n

CRA使用Babel编译器

\n

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

\n

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

\n

一个文件禁用

\n

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

\n

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

\n

此外,在 TypeScript 中,以这种方式定义的类型可能是可选的。所以如果在 tsconfig.json 中使用则无法使用

\n
{\n   "compilerOptions": {\n       ///...\n       "strict": false\n   }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

由于您遇到的最大痛苦似乎是查找外部库的类型定义,因此您可以为您不想进行类型检查的任何变量创建环境定义:

\n
declare var variableName: any;\n// better in .d.ts files\n
Run Code Online (Sandbox Code Playgroud)\n

例如,对于 jQuery,它将是declare var $: any;. 那么你可以这样做:$("#test").myNonExistentFunction();如果你愿意的话。

\n

或者,当使用 es2015 模块时,可以执行以下代码来允许导入库:

\n
declare module "jquery" {\n    var _temp: any;\n    export = _temp;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

速记环境模块声明 (TS 2.0+)

\n

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

\n
declare module "jquery";\n// or use a wildcard\ndeclare module "express-*"; // or use "*" to allow everything\n
Run Code Online (Sandbox Code Playgroud)\n

这将允许您自由使用这些导入而无需类型检查:

\n
import $ from "jquery";\n\n$.something(); // ok at compile time, but will be an error at runtime\n
Run Code Online (Sandbox Code Playgroud)\n

也就是说,在这种情况下采取的最佳路径是在.d.ts项目的文件中根据您使用的内容逐步定义您所依赖的库的接口。

\n

ts-忽略评论(TS 2.6+)

\n

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

\n
if (false) {\n    // @ts-ignore: Unreachable code error\n    console.log("hello");\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
// @ts-expect-error\n/* I will override error */\n//\nvar num: string = 3;\n
Run Code Online (Sandbox Code Playgroud)\n

没有不同?尝试使用这个规则:

\n

选择ts-expect-error如果:

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

选择ts-ignore如果:

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

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

\n