我开始将大型JS代码库迁移到TS。
按照Migrating from JavaScript文档中的建议,我首先将tsconfig.json
文件设置为allowJs: true
。
迁移过程是,每当我向代码库添加新文件时,便将其添加到TS中。
由于我希望对这些新的TS文件尽可能严格,因此我在tsconfig.json
文件中添加了不同的严格性选项,例如"noImplicitAny": true, "noImplicitThis": true
。
问题是,一旦这样做,我所有未迁移的JS文件都会出现大量错误,这些文件当然缺少类型不同的参数,因此具有隐式any
类型。
在这种情况下建议的工作流程是什么? 如上所述,我要:
unreached code
或unused variables
。 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文章(“早期收益”部分)时,我可以看到它确实说明我得到的只是非常有限的键入检查支持。
那么在我关闭这个问题之前的最后一件事-这是可以配置的还是仅此而已?
答案 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。)