Typescript-迁移带有严格标志的JS代码

时间:2018-10-28 07:40:31

标签: javascript typescript tsconfig

我开始将大型JS代码库迁移到TS。

按照Migrating from JavaScript文档中的建议,我首先将tsconfig.json文件设置为allowJs: true

迁移过程是,每当我向代码库添加新文件时,便将其添加到TS中。

由于我希望对这些新的TS文件尽可能严格,因此我在tsconfig.json文件中添加了不同的严格性选项,例如"noImplicitAny": true, "noImplicitThis": true

问题是,一旦这样做,我所有未迁移的JS文件都会出现大量错误,这些文件当然缺少类型不同的参数,因此具有隐式any类型。

在这种情况下建议的工作流程是什么? 如上所述,我要:

  • 对我创建的新TS文件尽可能严格。
  • 对我的JS文件运行TS标准检查,例如unreached codeunused variables
  • 我的JS文件没有相同的TS严格性,这仅仅意味着我需要将所有代码直接迁移到TS,这实际上是不可行的。

JS和TS文件使用不同的tsconfig.json文件是否可以实现?

这里的最佳做法是什么?

编辑:

正如马特(Matt)在下面的评论中所述,我确实使用了checkJs: true标志,这是导致JS文件编译错误的原因。

我了解到,即使不将JS文件移植到TS,即使使用.js文件,您也会收到“开箱即用”的类型检查,但这对我来说不是这种情况。

在没有checkJs标志的情况下,我收到Unreachable code detected'x' is declared but is never used警告,但事实就是这样。 出于某种原因,我确定它还会捕获如下内容:

let num = 12;
num = "aa";

但是它没有描述任何警告(并且智能感知并不“知道” num的类型为number)。

再次阅读Migrating from JavaScript文章(“早期收益”部分)时,我可以看到它确实说明我得到的只是非常有限的键入检查支持。

那么在我关闭这个问题之前的最后一件事-这是可以配置的还是仅此而已?

1 个答案:

答案 0 :(得分:1)

您确实必须使用两个tsconfig.json文件,一个文件带有"noImplicitAny": true(以及任何类似的选项),但不能使用"checkJs": true,而另一个文件则带有"checkJs": true,而不是{{ 1}}。使构建系统在每个"noImplicitAny": true文件上运行一次tsc并显示所有错误应该很简单。您可能需要在两个文件之一中设置tsconfig.json。 (如果您需要帮助,请告诉我。)

如果您使用Visual Studio Code作为IDE,那么根据我的简要测试,似乎没有一种方法可以使Visual Studio Code的TypeScript语言服务(用于在编辑时报告错误)适用于其他应用将"noEmit": true文件复制到TypeScript和JavaScript源文件中(除非您可以将文件分成两个文件夹,并且它们的依赖关系只能在一个方向上进行,这似乎不是您的情况)。因此,您必须选择两个配置之一作为主要配置,并参考构建输出中仅由其他配置检测到的错误。 (我不能代表其他IDE。)