SuperAPI AI 工具集

typescript-strict

编程与开发

查看项目

更新于 11-06 16:25

技能介绍

该技能的角色定位是开启严格类型检查并修复代码,使项目真正实现类型安全,同时不改变运行时行为、不削弱现有验证。修复诊断是关键,压制诊断不是。

一、用途 在项目中启用 TypeScript 严格模式(strict、noImplicitAny、strictNullChecks 等),并修复由此产生的类型错误。技能强调修复诊断而非静默错误,不改变运行时语义,不降低测试或验证强度。

二、主要能力

  1. 建立基线:读取 package.json(scripts、packageManager、engines)、锁文件、.nvmrc/.node-version 和 CI 配置,确定权威包管理器、Node 版本和构建/检查/测试命令。使用本地 node_modules/.bin/tsc 或包管理器本地解析确认编译器版本,避免裸 npx tsc 误装无关包。依赖缺失时先执行冻结/不可变恢复(npm ci、yarn install --immutable、pnpm install --frozen-lockfile),再确认编译器版本;恢复失败单独报告。运行项目真实构建、检查和测试命令并记录结果。枚举所有 TypeScript 配置和输入,包括 extends 链、references、tsconfig.*.json(测试、脚本、构建、声明)、monorepo 每包配置及测试运行器配置(ts-node/ts-jest/mocha/vitest/jest)。
  2. 启用严格性:在每个对项目代码做类型检查的配置(或其共享基础)中设置 strict: true,测试和辅助配置也不例外。禁止为通过检查添加 strict: false、noImplicitAny: false、strictNullChecks: false、便利性 skipLibCheck、新 exclude 条目、收窄 include/files、transpileOnly/isolatedModules 测试运行器或单独放松的配置。大型项目可增量启用标志,但最终状态必须为 strict: true。这不算编译器或依赖升级,仅在严格性确实需要时(如缺少 @types/*)才改工具/依赖版本,并保持清单、锁文件和包管理器同步。
  3. 通过类型建模修复诊断:优先添加精确注解(结构化接口/类型别名、递归数据类型、可辨识联合、字面量类型);在边界处收窄(类型守卫、in/typeof/instanceof 检查、对真正无类型输入使用 unknown 并在使用前校验);保持泛型关系(类型参数、映射、条件、索引访问类型与输入保持连接,不塌缩为 object、Function、Record<string, any> 或 any);用真实检查或保持当前行为的默认值处理 null/undefined;对回调/接收者类型问题使用 this 参数、重载或泛型。禁止在生产代码和正常测试中新增 any、双重断言(as unknown as T)、无依据的 as T 断言、宽泛非空断言(!)、用于隐藏诊断的 @ts-ignore/@ts-nocheck/@ts-expect-error 及类型安全规则 eslint-disable;禁止为满足类型而改变运行时语义。若诊断确实无法建模(如第三方声明有误),使用最窄的局部逃逸并注释原因和移除条件,在最终报告中列出。提供本地声明、环境模块或依赖类型替换前,先检查已安装包自身声明及上游类型入口,优先使用它们或精确建模边界;替换需有契约证据并验证有效用法可编译、无效用法仍被拒绝。
  4. 验证一切:类型检查第 1 步找到的每个配置(如 tsc -p 或 tsc -b),包括测试和声明/构建输出;运行项目原有 lint、构建、测试命令及程序/运行时入口(含 ESM/CJS 变体);触及 package.json 后用冻结安装确认锁文件一致;与基线对比,新失败须排查而非归为无关或偶发;每轮修复后重新运行诊断。
  5. 诚实收尾:最终报告需包含 strict 配置覆盖(列出配置)、编译、lint、测试、运行时、锁文件恢复的通过/失败/未运行台账,剩余类型错误,使用的逃逸手段(含断言和声明垫片及原因),发现的真实缺陷,以及依赖/配置变更。未完成需明确说明。

三、使用方式 该技能描述为角色任务流程,资料暂未提供具体安装命令、调用方式或平台配置。

四、适用场景 适用于需要将既有 TypeScript 项目迁移到严格模式、修复严格模式诊断、在 monorepo 或多配置项目中统一严格性的场景。

五、限制 资料暂未提供收费、价格、平台兼容性等具体限制信息。# 暂未提供