【发布时间】:2019-04-01 10:22:39
【问题描述】:
我开始将大型 JS 代码库迁移到 TS 中。
按照Migrating from JavaScript 文档中的建议,我首先将tsconfig.json 文件设置为allowJs: true。
迁移过程是每当我将新文件添加到代码库中时,我都会将其添加到 TS 中。
由于我希望对这些新的 TS 文件尽可能严格,因此我在 tsconfig.json 文件中添加了不同的严格性选项,例如 "noImplicitAny": true, "noImplicitThis": true。
问题是,一旦我这样做了,我的所有非迁移 JS 文件都会出现大量错误,当然,这些文件缺少不同参数的类型,因此具有隐式 any 类型。
在这种情况下建议的工作流程是什么? 如上所述,我想:
- 对我创建的新 TS 文件尽可能严格。
- 对我的 JS 文件运行 TS 标准检查,例如
unreached code或unused variables。 - 对我的 JS 文件没有相同的 TS 严格性,因为这仅仅意味着我需要立即将所有代码迁移到 TS,这实际上是不可行的。
对于 JS 和 TS 文件是否有可能使用不同的 tsconfig.json 文件?
这里的最佳做法是什么?
编辑:
正如马特在下面的评论中提到的,我确实使用了 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 文章(“早期福利”部分)时,我可以看到它确实表明我得到的只是非常有限的打字检查支持。
所以在我结束这个问题之前的最后一件事 - 这是某种可配置的还是仅此而已?
【问题讨论】:
-
除非您打开
checkJs选项(默认关闭)或添加// @ts-check注释,否则您的 JavaScript 文件中不应出现任何隐含错误。确保您没有做任何这些事情,如果您仍然遇到错误,请发布一个重现问题的存储库,以便我查看。 -
谢谢@MattMcCutchen,我编辑了我的问题。
标签: javascript typescript tsconfig