用什么策略把你的 JavaScript 迁移到 TypeScript
翻译:疯狂的技术宅
作者:Dr. Axel Rauschmayer
来源:2ality
正文共:1526 字
预计阅读时间:7 分钟
本文概述了将代码库从 JavaScript 迁移到 TypeScript 的策略。还提到了需要进一步阅读的材料。
三种迁移策略
这是用于迁移到TypeScript的三种策略:
对于我们的代码库,可以支持 JavaScript 和 TypeScript 文件的混合。我们仅从 JavaScript 文件开始,然后将越来越多的文件切换到 TypeScript。
我们可以继续使用普通的 JavaScript,并通过 JSDoc 注释添加类型信息,直到全部完成为止。这时我们就可以切换到 TypeScript。
对于大型项目,在迁移过程中可能会遇到太多 TypeScript 错误。针对错误的快照进行测试会有所帮助。
更多信息:
TypeScript 手册中的“从 JavaScript 迁移” (https://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html)
策略1:JavaScript/TypeScript 混合代码库
如果我们用编译器选项 --allowJs
,则 TypeScript 编译器支持 JavaScript 和 TypeScript 文件的混合:
TypeScript 文件被编译。
将 JavaScript 文件简单地复制到输出目录中(经过一些简单的类型检查之后)。
首先,只有 JavaScript 文件。然后我们一个接一个地将文件切换到 TypeScript。在这样做的同时,我们的代码库也在不断的被编译。
这是 tsconfig.json
的样子:
1{
2 "compilerOptions": {
3 ···
4 "allowJs": true
5 }
6}
更多信息:
Clay Allsopp 写的“逐步将 JavaScript 迁移到 TypeScript” (https://medium.com/@clayallsopp/incrementally-migrating-javascript-to-typescript-565020e49c88)
策略2:将类型信息添加到纯 JavaScript 文件
这个方法的工作方式如下:
我们将继续使用当前的构建架构。
我们运行 TypeScript 编译器,但仅作为类型检查器(编译器选项
--noEmit
)实用。通过 JSDoc 注释(请参见下面的示例)和类型定义文件添加类型信息。
一旦 TypeScript 的类型检查器不再报错,我们将用编译器来构建代码库(类似于先前的策略)。现在不急着从
.js
文件切换到.ts
文件,因为整个代码库已经完全有了静态类型。现在我们甚至可以生成类型文件(文件扩展名为.d.ts
)。
以下是通过 JSDoc 注释为普通 JavaScript 指定静态类型的方式:
1/**
2 * @param {number} x - A number param.
3 * @param {number} y - A number param.
4 * @returns {number} This is the result
5 */
6function add(x, y) {
7 return x + y;
8}
9/** @typedef {{ prop1: string, prop2: string, prop3?: number }} SpecialType */
10/** @typedef {(data: string, index?: number) => boolean} Predicate */
更多信息:
TypeScript 手册中的“对 JavaScript 文件进行类型检查” (https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html)
Oliver Joseph Ash 写的 “我们是如何逐步平稳的迁移到 TypeScript 的” (https://medium.com/unsplash/how-we-gradually-migrated-to-typescript-at-unsplash-7a34caa24ef1)
策略3:通过快照测试 TypeScript 错误迁移大型项目
在大型 JavaScript 项目中,无论我们选择哪种方法,切换到 TypeScript 都可能会产生大量错误。可以选择快照测试 TypeScript 错误:
我们第一次在整个代码库上运行编译器。
TypeScript 编译器产生的错误成为我们的初始快照。
在的代码上工作时,我们将新的错误输出与以前的快照进行比较:有时错误消失了。然后就可以创建一个新的快照。有时会出现新的错误。此时我们要么必须纠正此错误(如果可以),要么创建一个新的快照。
更多信息:
Dylan Vann 提出的“如何递增地将10万行代码迁移到Typescript” (https://dylanvann.com/incrementally-migrating-to-typescript/)
结论
我们快速学习了各种迁移到 TypeScript 的策略。另外还有两个提示:
先实验性的进行迁移:在你的代码库上尝试各种方法,然后选择其中的一种。
然后为下一步制定清晰的计划。需要与你的团队交流优先顺序:
有时可能需要优先完成快速迁移。
有时,在迁移过程中保持完整功能的代码可能具有优先权。
等等…
当你把代码库从 JavaScript 迁移到 TypeScript 时都经历些什么?请在评论中告诉大家!
原文链接
https://2ality.com/2020/04/migrating-to-typescript.html
长按二维码,加大鹏老师微信好友
拉你加入前端技术交流群
唠一唠怎样才能拿高薪
✎往期精彩回顾
本文分享自微信公众号 - 前端先锋(jingchengyideng)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Git设置分支保护实现CodeReview卡点
Git设置分支保护实现CodeReview卡点 GIT是一个分布式版本控制系统的软件,主要用来控制代码的版本。所谓分布式也就是每一个git的客户端都有一份完成的代码库,这样如果中央服务器出现问题,代码也会在各个开发者的电脑上有备份。(本文以下内容以GitLab为例) GitFlow 模式将代码和环境对应 GitFlow模式的各分支说明 1) master 主分支 , 产品的功能全部实现后 , 最终在master分支对外发布 该分支为只读唯一分支 , 只能从其他分支(release/hotfix)合并 , 不能在此分支修改 另外所有在master分支的推送应该打标签做记录,方便追溯 例如release合并到master , 或hotfix合并到master 2) develop 主开发分支 , 基于master分支克隆 包含所有要发布到下一个release的代码 该分支为只读唯一分支 , 只能从其他分支合并 feature功能分支完成 , 合并到develop(不推送) develop拉取release分支 , 提测 release/hotfix 分支上线完毕 , 合并到develop并...
- 下一篇
关于云原生应用的思考
文中前半部分截取、参照、截取了周志明《Graal VM 云原生时代的Java》视频讲解公开的PPT的部分内容,特此声明,在此对周志明精彩的分享表示感谢。 云原生的核心是什么? 技术人员谈技术问题直接、要看本质,不能东拉西扯。现在很多厂商都在谈云原生应用,那么云原生应用的核心是什么? 云原生的应用开发框架。 提到开发框架。传统的Java系的应用开发框架比较著名的是SSH(Spring框架、Hibernate框架、Struts框架)。 Spring MVC是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种XML、 JavaConfig、hin处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。 现有的绝大多数企业级应用都是由Java开发的。Java的特点如下: 所以说,Java通过众多的规范(JSR),让应用开发人员遵从,这有助于提升应用的规模、稳定性。 在微服务时代,传统Java的理念与时代产生了巨大的矛盾。 随着Web应用的发展,微服务时代,应...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- MySQL8.0.19开启GTID主从同步CentOS8