用途:在 TypeScript 项目中应用、审查或解释变量声明相关约定,涉及变量声明、const 断言、enum 替代方案等任务时可自动启用。
工作流程:先检查所在仓库的约定与配置;仓库显式约定优先于本技能的偏好性建议;只应用与当前任务相关的条目;当选择依赖具体情境时,说明重要权衡。
主要能力:
- const 断言:常量尽量用 as const 声明。字面量数字、字符串会被推断为精确字面量类型而非 number、string;对象与数组获得 readonly 属性,TypeScript 能捕获直接修改,如对 as const 数组调用 push 会报错;模板字符串加 as const 可保留字面量字符串类型。
- 替代 enum:不鼓励使用 enum,因其有运行时开销与若干已知陷阱,TypeScript 5.8 引入 --erasableSyntaxOnly 可禁用枚举等会生成运行时代码的特性。一般优先用字面量类型;循环取值时用 const 断言数组,如 const USER_ROLES = ['guest', 'moderator', 'administrator'] as const 配合 (typeof USER_ROLES)[number] 取联合类型;枚举任意值时用 const 断言对象。可用 ESLint 规则禁用枚举声明,资料给出 no-restricted-syntax 配合 selector 'TSEnumDeclaration' 的配置示例。
- 类型联合与布尔标志:互斥状态优先用类型联合而非多个 boolean 变量,避免标志累积导致状态含义不清;仅状态值变化时用字面量联合,各状态需不同数据时用可辨识联合(可结合 typescript-discriminated-unions 技能)。
- null 与 undefined:在 strictNullChecks 下二者类型与含义不同,应一致使用;值被显式置空(赋值或函数返回值)用 null,值缺失或被省略(可选表单字段、请求负载、数据库查询等)用 undefined。
边界与限制:能由 TypeScript 与 ESLint 自动检查的仍交给它们;不因技能启用而引入无关的样式约定。具体规则适用需结合仓库配置判断,资料未提供更多平台、版本兼容或使用步骤信息。