从代码库中删除TypeScript类型注释和断言

Est*_*ask 4 javascript typescript flowtype ecmascript-next

考虑到有一个应该从TypeScript转换为Babel的项目,文件包含Babel无法忽略的输入信息.

如何以自动方式从整个代码库中删除TS类型的注释和断言?

有没有办法将它们转换为Flow(考虑到某些TS类型的功能可以转换而有些不能)?

显然,这不能通过regexp获得.

该项目在其代码中具有许多TS/ES.next功能,并且应该是可读和可编辑的,因此在es6目标中进行转换不是一个选项.

xix*_*xao 8

剥离 TypeScript:

如果您有一个正在运行的 TS 项目

这意味着您拥有所有依赖项和项目类型检查。

使用tsconfig.json

{
  "include": ["./<SOURCE_DIR>"],
  "compilerOptions": {
    "outDir": "./<OUT_DIR>",
    "target": "es2020",
    "module": "es2020",
    "strict": false,
    "esModuleInterop": true,
    "jsx": "preserve",
    "moduleResolution": "node"
  }
}
Run Code Online (Sandbox Code Playgroud)

并运行npx tsc -p tsconfig.json

您无需使用 TypeScript 即可获得 ES6。


Jam*_*yle 7

这实际上是有趣的问题.我在Flow团队工作,所以我真的希望得到一个很好的答案,但现在不会很简单.

首先,您可能想问为什么您真的想要从TypeScript切换到Flow.对于现有项目,您应该考虑是否值得花时间进行切换.

话虽这么说,如果你觉得它值得,我会描述我认为最好的.

增量迁移

显然停止和重写一切都是一个坏主意,将一切都扔掉并重新开始是很悲惨的.这涉及到我们在Facebook上构建的所有内容的设计决策,包括Flow.Flow旨在逐步将应用程序迁移到具有静态类型.

但是,从一个静态类型系统转移到另一个静态类型系统有点不同.实际上它可能更容易一些,因为事情是在考虑类型的基础上构建的.

一次移动一个文件,尝试在某些地方切断自己,这样你就不会因为大量工作而无法自拔.

有很好的libdefs

Flow旨在尽可能地推断,但是在应用程序中有很多帮助它的东西之一就是对你在任何地方使用的库都有很棒的定义.

因此,我将专注于将libdef迁移到Flow,或者找到存在的那些,或者编写自己的.如果你想了解更多关于这一点,我写了一篇非常深入的文章.

确保你贡献你写回社区的任何libdefs !

设置构建系统

TypeScript具有编译和类型检查,它们都内置在同一个编译器中.但是,Flow将它们分开,以便您有多种选择.对于大多数东西Babel是推荐的,如果您从未在此处设置交互式页面之前设置Babel .完成后,我还写了关于后续步骤的本指南.


在这个过程中你很可能会遇到打嗝,请务必让我们了解它们,以便我们可以帮助你,并确保跟随的其他人没有同样的困难.

希望这能帮到你很多.玩得开心 :)