typescript - create-react-app --template typescript — 是否可以暂时禁用类型检查?
问题描述
我正在使用 TypeScript 开发一个 create-react-app,它会在我"include": "/src"
每次运行应用程序时在我的前端文件夹中自动生成一个 tsconfig,即使我删除或更改了文件也是如此。
有没有办法在 TS cra 中禁用类型检查(不弹出)?
解决方案
禁用类型检查
CRA 使用 Babel 编译器
Babel是 Flow、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-ignore
TypeScript 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
推荐阅读
- scala - 如何干净地处理嵌套的 Future[Option[A]]
- google-cloud-firestore - 由本地更改激活的 Firestore 快照侦听器的成本
- ios - SwiftUI TabView 不更新视图
- .net - Visual Studio 跳过我机器上的单元测试
- javascript - PhpStorm / WebIdea / WebStorm 没有在 Javascript 中提示正确的代码完成
- html - Bootstrap 4.5 网格
- video - 如何在不影响移动设备的情况下为桌面设置视频大小?
- preloader - 加载完网站的所有内容(包括图像、视频等)后,如何淡出我的预加载器?
- amazon-s3 - plesk 上的 Amazon s3 出现问题
- python - 应用程序成功推送到heroku,但如何正确引用文件名,使其像在本地主机中一样在线工作