用途
review-typescript 是一个原子技能(Skill),目的为审查 TypeScript 和 JavaScript 代码的语言与运行时约定。它不定义审查范围(差异与代码库),也不执行安全或架构分析;这些由范围技能和认知技能处理。它以标准格式发出结果列表以供聚合。
核心目标:生成 TypeScript/JavaScript 语言调查结果列表,涵盖给定代码范围内的类型安全、异步模式、错误处理、模块设计、运行时正确性、API/接口设计和性能/内存。
主要能力
该技能依据审核清单评估七个语言维度:
- 类型安全与类型系统使用:强制 strict 模式;优先使用显式类型而非 any;使用可辨识联合建模状态;应用类型守卫和收窄;利用泛型提高复用性;在可收窄的情况下避免类型断言(as)。
- 异步模式:确保正确的 async/await 使用和 Promise 链;验证跨异步边界的错误传播;检测竞态条件和未处理的 Promise 拒绝;检查悬空 Promise(缺少 await);验证并发模式(Promise.all、Promise.allSettled)。
- 错误处理:验证 try/catch 的位置和针对性;优先使用自定义错误类型而非原始字符串/错误;确保穷尽的错误处理;检查错误是否携带足够上下文;验证 finally 块中的清理。
- 模块设计:优先使用 ESM(import/export)而非 CJS(require/module.exports);审计桶式导出的影响;检测循环依赖;检查模块作用域内的意外副作用;验证模块解析一致性。
- 运行时正确性:检查空/未定义处理(可选链、空值合并);强制严格相等(===/!==);检测强制转换陷阱;检查原型污染风险;验证迭代器/生成器的正确性。
- API 与接口设计:检查函数签名的清晰度和一致性;验证重载顺序正确且无歧义;检查品牌/不透明类型以确保领域安全;在意外变更场景下强制 readonly;验证索引签名和映射类型。
- 性能与内存:检测基于闭包的内存泄漏;验证事件监听器和订阅清理;检查 WeakRef/WeakMap 的缓存模式使用;评估导入带来的包体积影响;识别热路径低效(如循环中不必要的分配)。
使用方式
该技能的输入为代码范围:包含 TypeScript 或 JavaScript 代码(.ts、.tsx、.js、.jsx、.mts、.mjs、.cts、.cjs)的文件或目录(或 diff),由用户或范围技能提供。输出为零个或多个调查结果,每条结果包含位置、类别(语言 TypeScript)、严重性、标题、描述和可选建议,且均引用具体文件:行或符号名称。
适用场景
- 编排式审查:当 orchestrate-code-review 运行 TypeScript/JavaScript 项目的范围 → 语言 → 框架 → 库 → 认知流程时,作为语言步骤使用。
- 仅 TypeScript 审查:当用户只想检查 TypeScript/JavaScript 语言约定时。
- PR 前语言检查表:在合并之前确保类型安全、异步正确性和模块设计健全。
- 何时使用:当审查的代码是 TypeScript 或 JavaScript 且任务包含语言质量时,范围由调用者或用户确定。
限制
- 硬边界:不执行范围选择、安全或架构审查;遵守 TypeScript/JavaScript 语言和运行时约定;不在没有具体位置或可行建议的情况下给出结论;除非明确在范围内,不审查非 TS/JS 代码的 TS/JS 特定规则。
- 技能边界:不选择或定义代码范围(由调用者或审查代码确定);不执行安全分析(注入、密钥),应使用 review-security;不执行架构分析,应使用 review-architecture;不查看框架特定约定(Vue、React、Angular),应使用相应框架技能。
- 交接:当所有 TypeScript/JavaScript 结果发出后,交给 orchestrate-code-review 进行聚合;当发现注入风险或密钥时,记下并建议 review-security;当用户需要全面审查(范围+语言+认知)时,重定向到审查代码。
示例
- 示例 1:不安全地使用 any。输入为函数参数类型为 any 且没有运行时验证的模块;预期发出一个针对不安全 any 使用的发现(主要),建议用适当类型、泛型或收窄后的 unknown 替换,类别为语言 TypeScript。
- 示例 2:异步调用时缺少 await。输入为异步函数调用另一个异步函数而不使用 await、丢弃 Promise;预期发出一个针对悬空 Promise 的发现(关键/主要),建议添加 await 或显式处理返回的 Promise,类别为语言 TypeScript。
- 边缘情况:同一项目中混合使用 ESM 和 CJS。输入为部分文件使用 import/export、其他文件使用 require/module.exports 的项目;预期发出模块系统使用不一致的结果,建议迁移到单一模块系统(最好是 ESM)或记录混合使用的原因,类别为语言 TypeScript。
官方文档中未提供有关收费、价格或具体平台支持的更多信息。