疯狂的技术宅

以前出于工作目的,编写和翻译了大量的技术文章,以前端为主,删掉了过时的、毫无营养的内容,留下的都是精华。


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于本站

  • 回到主站

  • 搜索

用什么策略把你的 JavaScript 迁移到 TypeScript

时间: 2020-04-22 分类: 前端技术   字数: 1181 字 阅读: 3分钟
标签: #JavaScript# #TypeScript# #迁移#
  • 本文译自:https://2ality.com/2020/04/migrating-to-typescript.html
  • 译者:疯狂的技术宅

本文概述了将代码库从 JavaScript 迁移到 TypeScript 的策略。还提到了需要进一步阅读的材料。

三种迁移策略

这是用于迁移到TypeScript的三种策略:

  • 对于我们的代码库,可以支持 JavaScript 和 TypeScript 文件的混合。我们仅从 JavaScript 文件开始,然后将越来越多的文件切换到 TypeScript。
  • 我们可以继续使用普通的 JavaScript,并通过 JSDoc 注释添加类型信息,直到全部完成为止。这时我们就可以切换到 TypeScript。
  • 对于大型项目,在迁移过程中可能会遇到太多 TypeScript 错误。针对错误的快照进行测试会有所帮助。

更多信息:

  • TypeScript 手册中的“从 JavaScript 迁移”

策略1:JavaScript/TypeScript 混合代码库

如果我们用编译器选项 --allowJs,则 TypeScript 编译器支持 JavaScript 和 TypeScript 文件的混合:

  • TypeScript 文件被编译。
  • 将 JavaScript 文件简单地复制到输出目录中(经过一些简单的类型检查之后)。

首先,只有 JavaScript 文件。然后我们一个接一个地将文件切换到 TypeScript。在这样做的同时,我们的代码库也在不断的被编译。

这是 tsconfig.json 的样子:

{
  "compilerOptions": {
    ···
    "allowJs": true
  }
}

更多信息:

  • Clay Allsopp 写的 “逐步将 JavaScript 迁移到 TypeScript”

策略2:将类型信息添加到纯 JavaScript 文件

这个方法的工作方式如下:

  • 我们将继续使用当前的构建架构。
  • 我们运行 TypeScript 编译器,但仅作为类型检查器(编译器选项 --noEmit)实用。
  • 通过 JSDoc 注释(请参见下面的示例)和类型定义文件添加类型信息。
  • 一旦 TypeScript 的类型检查器不再报错,我们将用编译器来构建代码库(类似于先前的策略)。现在不急着从 .js 文件切换到 .ts 文件,因为整个代码库已经完全有了静态类型。现在我们甚至可以生成类型文件(文件扩展名为 .d.ts)。

以下是通过 JSDoc 注释为普通 JavaScript 指定静态类型的方式:

/**
 * @param {number} x - A number param.
 * @param {number} y - A number param.
 * @returns {number} This is the result
 */
function add(x, y) {
  return x + y;
}
/** @typedef {{ prop1: string, prop2: string, prop3?: number }} SpecialType */
/** @typedef {(data: string, index?: number) => boolean} Predicate */

更多信息:

  • TypeScript 手册中的“对 JavaScript 文件进行类型检查”
  • Oliver Joseph Ash 写的 “我们是如何逐步平稳的迁移到 TypeScript 的”

策略3:通过快照测试 TypeScript 错误迁移大型项目

在大型 JavaScript 项目中,无论我们选择哪种方法,切换到 TypeScript 都可能会产生大量错误。可以选择快照测试 TypeScript 错误:

  • 我们第一次在整个代码库上运行编译器。
  • TypeScript 编译器产生的错误成为我们的初始快照。
  • 在的代码上工作时,我们将新的错误输出与以前的快照进行比较:有时错误消失了。然后就可以创建一个新的快照。有时会出现新的错误。此时我们要么必须纠正此错误(如果可以),要么创建一个新的快照。

更多信息:

  • Dylan Vann 提出的“如何递增地将10万行代码迁移到Typescript”

结论

我们快速学习了各种迁移到 TypeScript 的策略。另外还有两个提示:

  • 先实验性的进行迁移:在你的代码库上尝试各种方法,然后选择其中的一种。
  • 然后为下一步制定清晰的计划。需要与你的团队交流优先顺序:
    • 有时可能需要优先完成快速迁移。
    • 有时,在迁移过程中保持完整功能的代码可能具有优先权。
    • 等等…

当你把代码库从 JavaScript 迁移到 TypeScript 时都经历些什么?请在评论中告诉大家!

标签: #JavaScript# #TypeScript# #迁移#

标题:用什么策略把你的 JavaScript 迁移到 TypeScript

链接:https://fe-tech.viewnode.com/post/202004/22/

作者:疯狂的技术宅

声明: 本博客文章除特别声明外,均采用 CC BY-NC-ND 4.0 国际许可协议( 知识共享署名-非商业性使用-禁止演绎 4.0),转载请注明出处!

GitHub 上的一些技巧、工具和搞笑的东西
ECMAScript 2020 的新功能
  • 文章目录
  • 站点概览
疯狂的技术宅

疯狂的技术宅

退休程序员,硬件发烧友,人工智能爱好者。写写代码喝喝茶,晒晒太阳带带娃。

457 日志
8 分类
583 标签
GitHub
友情链接
  • viewnode
  • mofish
标签云
  • Javascript 172
  • Node.Js 62
  • Vue 36
  • Typescript 28
  • 实战项目 28
  • 面试 21
  • React 20
  • Css 17
  • 面试题 16
  • 教程 13
  • Promise 12
  • Chrome 9
  • Debug 9
  • 调试 9
  • 资源 9
  • Deno 8
  • Dom 8
  • 杂谈 8
  • 正则表达式 8
  • 测试 8
  • 三种迁移策略
  • 策略1:JavaScript/TypeScript 混合代码库
  • 策略2:将类型信息添加到纯 JavaScript 文件
  • 策略3:通过快照测试 TypeScript 错误迁移大型项目
  • 结论
© 2018 - 2022 疯狂的技术宅 All Rights Reserved
Powered by - Hugo v0.99.0 / Theme by - NexT
Storage by 俺的服务器 / 冀ICP备2022010157号
0%