【问题标题】:Usage of the TypeScript compiler argument 'skipLibCheck'TypeScript 编译器参数“skipLibCheck”的使用
【发布时间】:2019-02-18 01:48:01
【问题描述】:

我一直在研究对 skipLibCheck TypeScript 编译器参数的进一步解释,以确定将此设置为 true 的安全性。我找到的最深入的解释如下:

新的--skipLibCheck TypeScript 2.0 添加了一个新的 --skipLibCheck 编译器选项,该选项会导致声明文件(扩展名为 .d.ts 的文件)的类型检查被跳过。当程序包含大型声明文件时,编译器会花费大量时间对已知不包含错误的声明进行类型检查,而跳过声明文件类型检查可能会显着缩短编译时间。

由于一个文件中的声明会影响其他文件中的类型检查,因此指定 --skipLibCheck 时可能无法检测到某些错误。例如,如果非声明文件增加了声明文件中声明的类型,则可能会导致仅在检查声明文件时才报告的错误。然而,在实践中,这种情况很少见。

我知道您显然可以从编译器中获得性能优势,而不必键入被认为不包含错误的检查文件,但我已经看到这个标志被用来解决编译器发出的与声明文件有问题。

确实使用此标志来解决此问题会降低应用程序输入的完整性吗?

【问题讨论】:

  • 是的,从某种意义上说,根据错误是什么,编译器可能会以一种导致代码中其他地方的问题被忽视的方式从错误中恢复(例如,用@替换错误的类型987654321@),因此抑制类型错误(无论是通过--skipLibCheck//@ts-ignore 还是任何其他方式)是一种冒险的做法。如果您有更具体的问题,请澄清。
  • 我碰巧在一个客户的项目上工作,他们有一些不同依赖项的版本冲突,这些冲突没有被 package.json 中的分辨率选项修复。一些 React 类型的基本上不同类型的版本导致编译器退出并出现错误。启用此选项有助于“忽略那些不匹配的类型”,直到我通过适当的解决方案修复它们。

标签: typescript typescript-typings typescript2.0


【解决方案1】:

简明扼要地解释这个问题:

确实 [启用 skipLibCheck] 会降低应用程序输入的完整性吗?

我同意是的,确实如此。但是,如果替代方案是无法编译的应用程序,那么它就会成为一个方便的标志。

虽然 Typescript 本身相当成熟,但 typescript 社区仍然相对年轻。大量的库,甚至是一些原生 typescript 库都有可用的类型定义,但由于各种原因,它们可能彼此不兼容。

您可以导入一个库,其类型是使用比您想要的不太严格的 tsconfig 构建的 - 当您尝试使用它时,您的编译器可能会抱怨。

您会发现两个库定义了相同的类型,但不兼容。我已经导入了一些库,它们为 Buffer 的 Polyfill 提供了自己的类型,但由于它们不兼容,我的整个应用程序将无法编译。

启用--skipLibCheck 可以帮助解决这些问题。打开它会阻止 Typescript 对整个导入的库进行类型检查。相反,Typescript 只会针对这些类型对您使用的代码进行类型检查。这意味着只要您不使用导入库的不兼容部分,它们就可以正常编译。

tl;dr,是的,--skipLibCheck 会降低类型检查,理想情况下我们不会使用它。但并不是每个库都提供完美的类型,所以跳过它可能很好。

【讨论】:

  • 鉴于 --skipLibCheck 加快了速度,将它用于每天数十次的开发编译可能是有意义的,但偶尔不使用(尤其是在最初合并时)新库)以确保在缩写检查遗漏某些内容的情况下,所有内容都通过了完整的类型检查。您可以同时享受这两种方式的好处。
  • 在使用 webworkers 和 TFjs 等一些库时,我也可以派上用场。见stackoverflow.com/questions/64606267/…
  • “你可以导入一个库,它的类型是用比你想要的不那么严格的 tsconfig 构建的”——理想情况下,如果类型相交,一种打字稿模式可能会发出警告,并且只有如果它们没有交集,则错误。 “你会发现两个库定义了相同的类型,但不兼容。” --- 理想情况下,打字稿应该能够识别并允许它。
  • 编译错误error TS2717: Subsequent property declarations must have the same type.
  • 我在这里是因为我在新创建的 React 项目中的 React 模块中遇到循环引用打字稿错误。 type alias 'ReactFragment' circularly references itself。没想到这么快就陷入了困境。
猜你喜欢
  • 1970-01-01
  • 2020-05-11
  • 2012-09-25
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多