首页 > 解决方案 > 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 的新手。任何帮助,将不胜感激。

标签: reactjstypescriptgsap

解决方案


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');

推荐阅读