在做JavaScript项目迁移成TypeScript的时候,对于一个小项目来说,你也许可以一举从JavaScript转换成TypeScript;但是对于一个较大的项目来说,这种"停滞一切"的方法是行不通的。你需要能够逐步过渡。这意味着需要一种让TypeScript和JavaScript共存的方法。
关键就在于allowJs编译器选项,通过allowJs, TypeScript文件和JavaScript文件可以互相导入,对于JavaScript文件来说,这种模式是完全允许的,除非你使用@ts-check,否则你看到的唯一错误就是语法错误。
虽然它不大可能捕捉到错误,但allowJs确实给了你一个可以在你开始修改代码前,将Typescript引入到你的构建链中的机会,这样可以让你在将模块转换成TypeScript的同时是随时可以运行测试的。
通常最简单的行进路线是,你的打包程序已经集成了Typescript或者有能用的插件,这是最简单的方法。大多数单元测试工具也有这样的选项。例如,对于jest,你可以先安装ts-jest, 然后通过指定一个类似下列jest.config.js的文件来将Typescript源码传给它:
module.exports = {
transform: {
"^.+\\.tsx?$": "ts-jest",
},
}
如果你的构建链是自定义的,那么你的任务将更加复杂。但总有一个很好的后备选项:当你指定outDir选项时,TypeScript将在一个与你的源代码树平行的目录中生成纯JavaScript源代码。通常你现有的构建链可以在其上运行。你可能需要调整TypeScript的JavaScript输出,使其与你的原始JavaScript源码紧密匹配(例如,通过指定target和module选项)。
将TypeScript添加到你的构建和测试的过程可能不会是令人愉快的事,但它是一个必不可少的任务,这将让你可以充满信心地开始迁移代码。
要记住是事情:
- 当你在过渡项目时,可通过allowJs编译器选项支持混合使用TypeScript、JavaScript。
- 在开始大规模迁移之前,让TypeScript可以工作在你的测试和构建链上。