跳至内容
文档
从 Tsc 迁移

从 tsc 迁移

如果您要从 TypeScript 编译器 (tsc) 迁移,则需要记住一些事项。

TypeScript 版本

SWC 支持最新的稳定版 TypeScript。

isolatedModules: true

SWC 以逐个文件的方式工作,因此任何依赖于了解完整类型系统的代码转换都无法正常工作。

如果您遇到这些限制,某些 TypeScript 特性(例如 const 枚举和命名空间)可能会导致运行时问题。

在这种情况下,使用 TypeScript 中的 isolatedModules(在新标签页中打开) 标志可以帮助您警告任何可能无法被 SWC 正确解释的代码。

请参阅 importsNotUsedAsValues: "error"

由于上述原因,SWC 无法完全辨别导入绑定是 还是 类型

将此 importsNotUsedAsValues(在新标签页中打开) 选项设置为 error 将确保 TypeScript 在类型检查期间正确地将所有类型导入标记为 类型,从而在 SWC 中准确地删除它们。

esModuleInterop: true

TypeScript 的导入互操作性偏离了 ES6 模块规范。

另一方面,SWC 采用了与 Babel 类似的方法(有时可能更严格)。

启用此 esModuleInterop(在新标签页中打开) 选项可确保 tsc 的行为与 SWC 的行为一致。

verbatimModuleSyntax: true

这是 TypeScript 5.0 中引入的新选项,用于替换 isolatedModulespreserveValueImportsimportsNotUsedAsValues。有关更多详细信息,请查看 发行说明(在新标签页中打开)

useDefineForClassFields

此问题涉及 [[Define]][[Set]] 的语义。

谁不需要关心它?

  • 从未使用过类的。
  • 使用类但从未使用继承的。

谁需要特别注意这个问题?

  • 装饰器用户。

如果值已在您的 tsconfig.json 中设置,则可以在 swc 的配置中使用相同的值。

如果尚未设置,并且您遇到问题,那么您有必要补充此设置。

请注意,此选项的默认值将根据您的 tsconfig.jsontarget 而改变。

请查看 useDefineForClassFields(在新标签页中打开) 选项。

如果 target 是 ES2022 或更高版本(包括 ESNext),则为 true,否则为 false。

已知问题

备注

SWC 仅转换代码,不执行类型检查。因此,建议您继续使用 tsc 来检测任何类型错误。