用途:在单体仓库中编写、修改或评审 TypeScript/JavaScript 代码时使用,涉及实现、重构、代码审查、依赖选择与类型安全等场景。
主要能力与要求:
依赖处理:运行仓库 JavaScript、执行包脚本或新增功能前,先阅读根 package.json 及相关包的 package.json;先检查已安装依赖,能复用现有包就复用,清单文件是事实来源而非静态清单。
类型约束:优先使用 TypeScript 的 type 而非 interface;对真正未知、外部、用户可控、被持久化或无主 API 数据使用运行时校验;不要用 as any、经 unknown 的双重断言或非空断言掩盖不确定性,应改用显式检查或流敏感类型。as 要少用,能用 satisfies、可辨识联合、泛型或流敏感收窄表达时就优先用。已知边界处有控制流保证类型时可用针对性 as,例如平台分支内将 message 断言为 Message<SlackEvent> 或 Message<GitHubRawMessage>,优于用泛型 Record<string, unknown> 辅助已知适配器字段。测试文件与 fixture 可在构造 fixture、部分 mock 和错误路径中使用断言,但测试导入的非测试代码仍适用生产规范。
未使用值:从根源修复,删除死参数或死代码,或使用被意外忽略的值;仅对有意未使用的位置参数加 _ 前缀,如 (_req, res)。
可维护性:保持方案简单,不过度抽象或过早泛化,标记真正的 DRY 违规;优先用闭包而非琐碎的 TypeScript 类;变量、函数与测试命名清晰;仅对上下文不清晰的行为添加简短注释;保持注释最新,更新或删除过期及无价值注释;保留外部 API 原始拼写,包括 snake_case 或特殊命名,不按惯例改写,简单可搜索的代码优于看似聪明的代码;能实际观察结果或数据库副作用时避免 mock,依赖无法间接测试时应改为显式参数并传入 fake;保持函数简单,不要仅为把选项展开进结果而添加参数,调用方可直接做这件事。
限制:资料未提供该技能的具体安装命令、支持的平台范围、收费方式或版本要求。