【发布时间】: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