2.只修复一种类型比修复文件容易得多: 修复整个文件可能非常复杂,因为文件可能有多个依赖项。使用混合迁移,很难跟踪迁移的实际进度和文件的状态。
3.改进一些常用库的类型
interface MigrateParams { rootDir: string; // 根目录的路径 config: MigrateConfig; // 迁移配置,包括插件列表 server: TSServer; // TSServer 分支的一个实例 }它会执行以下操作:
4.在每个文件上运行所有插件。如果文本因插件执行而改变,更新原始文件的内容并通知 TypeScript 语言服务器文件已更改。
// 堆代码 duidaima.com // 转化前: const fn2 = function(p3, p4) {} const var1 = []; // 转化后: const fn2 = function(p3: any, p4: any) {} const var1: any = [];declareMissingClassPropertiesPlugin 会找到类申明中缺失的类型,并且添加any修饰。
在开始迁移过程之前,我们必须安装和配置 TS:.初始化 TS 配置:
npx tsc --init.安装 React 类型(如果使用的是 React):
npm install --save-dev @types/react注意:init 命令将创建一个 tsconfig.json 文件。可以根据要求对其进行修改。
npm install --save-dev ts-migrate.将 JS 文件重命名为 TS 文件,即将文件后缀从.js/.jsx转换成.ts/.tsx:
npm run ts-migrate -- rename <project-dir> --sources <specific-dir>.将JS文件转换为TS格式:
npm run ts-migrate -- migrate <project-dir> --sources <specific-dir>/file.tsx注意:最好先提交重命名更改,然后再提交转换为 TS 更改。这样 Git 将更改识别为 1 个文件而不是 2 个文件(删除的文件 + 新文件)。
//堆代码 duidaima.com // wrong-type-assignment let age = 17; age = "seventeen"; // assign-to-const const color = "blue"; color = "red"; // add-conversions function sum(a, b) { return a + b; } // declare-missing-class-properties class Point { distance(point) { const dx = this.x - point.x; const dy = this.y - point.y; return Math.hypot(dx, dy); } }可以通过以下命令来重命名 JavaScript 文件:
npm run ts-migrate -- rename ./ --sources ./src/examples这里 --sources ./src/examples 指定了 tsconfig.json 中 sources 的路径为 ./src/examples。该命令在项目根目录下运行,通过相对路径指定需要处理的文件或文件夹。执行完该命令后,src/examples/example.js 就变成了 src/examples/example.ts。
npm run ts-migrate -- migrate ./ --sources ./src/examples/example.ts执行完该命令之后,就可以看到一些 ts-migrate 功能:
.ts-migrate 无法自动修复 TS 问题,它会留下带有错误详细信息的 @ts-expect-error 注释。
.虽然 ts-migrate 在需要的地方将类型放入变量,但仍然需要将 any 类型更改为特定类型。
-h, --help: 显示帮助信息。 -i, --init: 在 <folder> 文件夹中创建 tsconfig.json 文件。 -m, --migrate: 使用 codemods 修复 TypeScript 错误。 -rn, --rename: 将 <folder> 文件夹中的 JavaScript/JSX 文件重命名为 TypeScript/TSX 文件。 -ri, --reignore: 在项目上重新运行 ts-ignore。下面是一些示例:
npm run ts-migrate -- --help: 显示帮助信息。 npm run ts-migrate -- init frontend/foo: 在 frontend/foo 文件夹中创建 tsconfig.json 文件。 npm run ts-migrate -- rename frontend/foo: 将 frontend/foo 文件夹中的 JavaScript/JSX 文件重命名为 TypeScript/TSX 文件。TS Migrate 被设计为一组插件,因此它可以针对不同的用例进行很好的自定义。可以添加更多插件来解决诸如类型质量改进或与库相关的事件等问题。用户可以根据自己的需要添加具有不同插件集的自定义配置。这个工具并不能保证实现完全没有错误的转换,但在实际使用过程中,对于一个超过 50000 行代码、1000 个文件的项目,从 JavaScript 转换到 TypeScript 使用这个工具基本只需 1 天。