javascript - Typescript - 使用严格标志迁移 JS 代码

标签 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 标准检查,例如未到达的代码未使用的变量
  • 我的 JS 文件没有同样的 TS 严格性,因为这仅仅意味着我需要将所有代码直接迁移到 TS,这实际上并不可行。

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

这里的最佳实践是什么?

编辑:

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

我知道,即使不将 JS 文件移植到 TS,即使您使用 .js 文件,您也会收到“开箱即用”的类型检查,但这对我来说并没有发生。

如果没有 checkJs 标志,我会收到 检测到无法访问的代码'x' 已声明但从未使用 警告,但这似乎就这样吧。 出于某种原因,我确信它也会捕获如下内容:

let num = 12;
num = "aa";

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

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

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

最佳答案

您确实必须使用两个 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。)

关于javascript - Typescript - 使用严格标志迁移 JS 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53029363/

相关文章:

javascript - Bootstrap 3 Accordion 面板问题

javascript - 当 a 为负数且 b 为非整数时,为什么 Math.pow(a, b) 为 NaN?

Angular2 单元测试 - 未触发 MdCheckbox 中的更改事件

typescript - 尝试导入自定义包并运行模拟器时获取 "Error: Cannot find module <module>"

angular - 关于 angular4 项目中的 import {**} from @app/*

javascript - 如何通过点击获取<li>元素的数据

javascript - 通过 Ajax 或 Javascript 强制下载文件

javascript - 系统 JS 不加载模块

angular - 如何将 <Input> 标签放在 <img> 标签内

typescript - noImplicitAny 不工作 typescript