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

Typescript - migrating JS code with strict flags

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

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

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

因为我想对这些新的 TS 文件尽可能严格,所以我在 tsconfig.json 文件中添加了不同的严格选项,例如 "noImplicitAny": true, "noImplicitThis": true.

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

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

JS 和 TS 文件可以使用不同的 tsconfig.json 文件吗?

这里的最佳做法是什么?

编辑:

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

我知道即使没有将你的 JS 文件移植到 TS,你也会收到 "out-of-the-box" 类型检查,即使你使用 .js 文件,但我不会这样。

没有 checkJs 标志,我会收到 Unreachable code detected'x' is declared but is never used 警告,但似乎仅此而已。 出于某种原因,我确定它也会捕获如下内容:

let num = 12;
num = "aa";

但它没有描述任何警告(并且智能感知没有 "know" numnumber 类型)。

再次阅读 Migrating from JavaScript 文章("Early Benefits" 部分)时,我发现它确实指出我得到的只是非常有限的打字检查支持。

在我结束这个问题之前的最后一件事 - 这是可配置的还是仅此而已?

您确实需要使用两个 tsconfig.json 文件,一个带有 "noImplicitAny": true(和任何类似的选项)但没有 "checkJs": true,另一个带有 "checkJs": true 但没有"noImplicitAny": true。让您的构建系统在每个 tsconfig.json 文件上一次 运行 tsc 并显示所有错误应该很简单。您可能希望在两个文件之一中设置 "noEmit": true。 (如果您需要这方面的帮助,请告诉我。)

如果您使用 Visual Studio Code 作为 IDE,那么根据我的简短测试,似乎没有办法获得 Visual Studio Code 的 TypeScript 语言服务(用于在您编辑时报告错误)将不同的 tsconfig.json 文件应用到您的 TypeScript 和 JavaScript 源文件(除非您可以将文件分成两个文件夹,并且只有一个方向的依赖关系,这不会'这似乎不是你的场景)。因此,您必须选择两种配置中的一种作为主要配置,并参考构建输出以了解仅由其他配置检测到的错误。 (我不能代表其他 IDE 发言。)