使用TypeScript编译器参数'skipLibCheck'

Dan*_*man 18 typescript typescript-typings typescript2.0

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

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

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

我明白你显然从编译器获得性能上的好处,不必输入被认为不包含错误的检查文件,但我看到这个标志用于解决编译器发出的与声明文件有关的错误问题.

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

Pro*_*Sim 8

简单地解释这个问题:

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

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

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

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

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

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

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

  • 考虑到 --skipLibCheck 可以加快速度,在日常、每天数十次的开发编译中使用它可能是有意义的,但偶尔使用 without(特别是在最初合并新库时)以确保一切都正确如果简短的检查遗漏了某些内容,则可以通过完整的类型检查。您可以通过这种方式获得两者的好处。 (11认同)