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 是 Flow、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
我正在使用 TypeScript 开发一个 create-react-app,它会在我的前端文件夹中自动生成一个 tsconfig "include": "/src"
每次我 运行 应用程序,即使我删除文件或更改它。
有没有办法在 TS cra 中禁用类型检查(不弹出)?
禁用类型检查
CRA 使用 Babel 编译器
Babel 是 Flow、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 之间升级,一个版本有一行代码错误,另一个版本没有。
- 老实说,您没有时间决定哪个选项更好。
来源: