用途:指导将 JavaScript 代码库渐进迁移到严格现代 TypeScript,适用于整体项目或按模块逐步转换、为既有 JS 通过 JSDoc 或注解补类型、为 JS/TS 混合仓库选择 tsconfig 与 allowJs 策略、在大代码库上开启 strict 或单项严格标志、清理快速转换遗留的 any、as 与 ! 断言、校验外部数据使类型在运行时成立、将 CommonJS 转 ESM、原型转类等 JS 惯用法改造,以及更新构建、运行与 CI 以类型检查并发布 TypeScript。
迁移流程:tsconfig 与策略 → 严格度棘轮 → 标注公共接口 → 消除 any 与不安全断言 → 校验运行时边界 → 转换 JS 惯用法 → 工具链/构建/CI。前置决策会逐级放大:错误的 tsconfig 或自上而下的转换顺序会迫使模块重复标注类型;早期 any 泛滥会污染下游。应从前段开始并按依赖图叶子向内推进。
规则分类与优先级:一、迁移准备与 tsconfig(关键,前缀 setup-):启用 allowJs 与 checkJs 做增量迁移、先转依赖叶子、重命名前用 JSDoc 与 @ts-check、优先 @ts-expect-error 而非 @ts-ignore、迁移期设 skipLibCheck、配置现代 module 与 moduleResolution、启用 isolatedModules 与 noEmitOnError。二、严格度棘轮(关键,前缀 strict-):逐项开启严格标志、优先 strictNullChecks、开启 noImplicitAny、开启 noUncheckedIndexedAccess、catch 错误用 unknown、用 exactOptionalPropertyTypes 区分缺失与 undefined。三、标注公共接口(高,前缀 surface-):显式标注导出函数签名、用真实注解替代 JSDoc 类型标签、精确标注默认与可选参数、将松散对象参数改为命名接口、标注回调与高阶参数、声明类字段类型。四、替换 any 与不安全断言(高,前缀 unsafe-):在不可信边界用 unknown 替代 any、用收窄或校验替代 as、避免双重断言、用 Record 或索引签名标注动态属性访问、用具体调用签名替代 Function 类型、用收窄替代非空断言。五、运行时数据校验(中高,前缀 runtime-):在边界校验外部数据、一次性解析并标注环境变量、由运行时 schema 派生静态类型、为无类型库返回值编写类型守卫、通过校验标注 JSON.parse 结果。六、JS 到 TS 惯用法转换(中,前缀 idiom-):require 与 module.exports 转 ESM、原型构造器转类、类型专用导入用 import type、用剩余参数替代 arguments 对象、冻结对象枚举转 const 对象或联合类型、优先具名导出而非默认导出、用可选链替代手工存在性判断。七、工具链与构建迁移(中低,前缀 tooling-):为无类型依赖提供环境声明、在断言库返回值前安装 @types 包、用 tsx 而非 ts-node 标志直接运行 TypeScript、为迁移后的库输出声明文件、在 CI 中加入独立于构建的类型检查步骤。
限制:资料未提供该技能的具体安装命令、运行命令、价格与效果数据。相关技能包括 typescript-refactor(重构已 TypeScript 的代码)与 typescript-advanced-patterns(迁移完成后使用的高级类型模式)。