寻求可批量添加@ts-expect-error注释忽略TS严格模式错误的codemod
如何自动给TypeScript严格模式下的所有报错添加
// @ts-expect-error注释 方法一:使用ts-migrate工具
ts-migrate是专门用于TypeScript迁移的工具集,其中包含自动添加@ts-expect-error注释的fixer,完全匹配你的需求:
- 全局安装ts-migrate:
npm install -g ts-migrate
- 在
tsconfig.json中启用strict: true模式; - 在项目根目录运行以下命令,给所有TS错误位置添加指定注释:
ts-migrate fix --fixers expect-error .
默认生成的注释可通过自定义配置修改为你需要的内容:// @ts-expect-error this one appeared after introducing strict mode, please fix it。
方法二:自定义TypeScript Compiler API脚本
如果需要更灵活的控制,可以基于TypeScript的Compiler API写一个简单脚本,批量插入注释:
const ts = require('typescript'); const fs = require('fs'); const path = require('path'); // 配置项目根目录和tsconfig路径 const projectRoot = './'; const configFilePath = ts.findConfigFile(projectRoot, ts.sys.fileExists); if (!configFilePath) { console.error('无法找到tsconfig.json文件'); process.exit(1); } // 读取并配置TS编译程序 const config = ts.readConfigFile(configFilePath, ts.sys.readFile).config; const program = ts.createProgram({ rootNames: config.include || ['./src/**/*'], options: { ...config.compilerOptions, strict: true } }); // 获取所有编译诊断错误 const diagnostics = ts.getPreEmitDiagnostics(program); // 遍历错误并插入注释 diagnostics.forEach(diag => { if (diag.file && diag.start !== undefined) { const filePath = diag.file.fileName; const sourceContent = fs.readFileSync(filePath, 'utf8'); const lines = sourceContent.split('\n'); const { line } = diag.file.getLineAndCharacterOfPosition(diag.start); // 避免重复插入注释 if (!lines[line].includes('@ts-expect-error')) { lines.splice(line, 0, `// @ts-expect-error this one appeared after introducing strict mode, please fix it`); fs.writeFileSync(filePath, lines.join('\n')); } } });
使用说明:
- 确保项目已安装
typescript依赖:npm install typescript --save-dev - 将脚本保存为
add-expect-error.ts,运行:node add-expect-error.ts - 注意:脚本会直接修改文件,建议先备份或提交当前代码后再执行
关键注意事项
- 优先使用
@ts-expect-error而非@ts-ignore:前者会在错误修复后触发TS提示,提醒你移除多余注释,更适合逐步清理旧代码 - 运行工具后,建议先提交添加了注释的代码,再按模块逐步修复标记的错误,避免一次性处理大量变更
内容的提问来源于stack exchange,提问作者Maksim Nesterenko
相关产品推荐
相关产品推荐

