reactjs - TypeScript skipLibCheck 仍在检查 node_modules 库
问题描述
我将 TypeScript 与 React 一起使用,TypeScript 仍在检查 node_modules 文件夹中的库,尽管我在 tsconfig.json 中将“skipLibCheck”设置为 true。
这是我的 tsconfig.json (我添加了排除部分以进行故障排除,这也不起作用):
{
"compilerOptions": {
"target": "es5",
"forceConsistentCasingInFileNames": true,
"module": "commonjs",
"jsx": "react",
"declaration": true,
"sourceMap": true,
"experimentalDecorators": true,
"skipLibCheck": true,
"typeRoots": [
"./node_modules/@types"
],
"types": [
"es6-promise",
"webpack-env"
],
"lib": [
"es5",
"dom",
"es2015.collection"
]
},
"exclude": [
"node_modules",
"./node_modules",
"./node_modules/*",
"./node_modules/@types/node/index.d.ts",
]
}
正在使用的 React 版本是 15.4.2,并且 TypeScript 已全局安装......我有 3.7.2 版本,我将其升级到 3.7.3,因为我在某处读到 skipLibCheck 不适用于 3.7.2 ..
尝试使用 gulp 构建项目时遇到的错误是:
Error - typescript - node_modules\gsap\types\gsap-utils.d.ts(97,75): error TS1144: '{' or ';' expected
如果我将 skipLibCheck 设置为 false,并构建项目,我将遇到更多错误。因此,skipLibcheck 似乎部分工作。
知道如何解决这个问题吗?我还是 TypeScript 的新手。任何帮助,将不胜感激。
解决方案
skipLibCheck
并不是要阻止 node_modules 中的所有类型检查。虽然它可能适用于某些项目,但这只是一个巧合。你可以说它部分起作用,真的。这是它的作用:
跳过库检查 - skipLibCheck
跳过声明文件的类型检查。
这可以在编译期间节省时间,但会牺牲类型系统的准确性。例如,两个库可以以不一致的方式定义相同类型的两个副本。TypeScript 不会对所有 d.ts 文件进行全面检查,而是会键入检查您在应用程序源代码中特别引用的代码。
您可能会考虑使用 skipLibCheck 的一个常见情况是,当您的 node_modules 中有两个库类型的副本时。在这些情况下,您应该考虑使用像 yarn 的解析这样的功能来确保在您的树中只有一个该依赖项的副本,或者通过了解依赖项解析来研究如何确保只有一个副本,从而在不使用额外工具的情况下解决问题。
skipLibCheck
是在 Typescipt 2.0 中引入的,因此升级 Typescript 并不是真正的修复。再一次,它可能对某些人有用。现在我遇到了一个案例,我必须将使用 Typescript 4 的库添加到使用 Typescript 3 的项目中。构建时出现错误。拥有相同版本的打字稿有帮助。打字稿的版本将特定于您的项目。
我知道的唯一快速解决方案是使用require
而不是import
(我的项目是后端):
import * as lib from 'lib';
const lib = require('lib');
推荐阅读
- javascript - 无法解决致命异常:无法将消息的值从 ReadableNativeMap 转换为字符串
- shopify - 在 Shopify 中通过 SKU 而不是 Variant ID 添加产品
- mysql - 将 INNER JOIN 与插入和更新一起使用时在 VB.Net 中出现错误
- docker - docker-compose up 不监听指定端口
- java - 在spring boot中需要认证才能获取公共资源
- flutter - 在标签栏中向右溢出 88 像素颤振标签栏
- math - 如何在给定特定范围的列表中找到一对数字?
- laravel - 为 laravel 日志设置适当的权限
- python - 有什么方法可以继续执行 vscode 调试器中引发的意外异常?
- java - 奇怪的数组列表结果?