TypeScript编译器参数'skipLibCheck'

时间:2018-09-13 10:27:22

标签: typescript typescript-typings typescript2.0

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

  

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

     

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

我了解到,显然编译器无需键入被认为不包含错误的检查文件,您将获得性能上的好处,但是我已经看到此标志可用于解决编译器发出的与错误有关的错误。声明文件有问题。

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

1 个答案:

答案 0 :(得分:1)

简而言之,这个问题:

  

确定[启用skipLibCheck]是否会降低应用程序键入的完整性?

我同意,是的。但是,如果替代方法是不编译的应用程序,则它将成为方便的标志。

尽管Typescript本身已经相当成熟,但是Typescript社区还相对年轻。有大量的类型定义可用,甚至可以用于一些本机的打字稿库,但是由于各种原因,它们可能彼此不兼容。

您可以导入一个库,该库的类型使用比您想要的限制更严格的tsconfig构建-编译器在尝试使用它时可能会抱怨。

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

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

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