SuperAPI AI 工具集

prefer-type-annotations

编程与开发

查看项目

更新于 10-16 00:06

技能介绍

用途:在 TypeScript 中处理类型时,优先使用类型注解(: Type)而不是类型断言(as Type)。注解会校验值是否符合类型,断言则让 TypeScript 直接信任你,从而绕过检查。

主要能力与规则:核心原则是当类型注解可行时绝不使用类型断言,包括“显然正确”“比 TypeScript 更懂”“断言更简单”等情况都不例外。检测信号是代码中出现 as SomeType,此时应自问能否改用类型注解。例如 const alice = {} as Person 不会报错但 alice 缺少属性;而 const alice: Person = {} 会提示缺少 name。箭头函数应注解返回类型,如 map((name): Person => ({name})),而非 map(name => ({name} as Person))。

适用场景:变量声明、函数参数、函数返回、对象字面量优先用注解;已知存在的 DOM 元素可用 as HTMLElement 并加注释说明;null 检查后可用非空断言 !(谨慎);来自 API 的未知值应在用 unknown 校验后再处理。

限制与注意:as any、创建对象后立即 as Type、链式断言(x as A as B)、用断言修复“not assignable”错误、无理由的 ! 都是危险信号。若在运行时已检查类型,应使用类型守卫或条件收窄,而非断言。断言仅在确实掌握 TypeScript 无法获知的信息时使用,并应加注释说明原因。

参考:基于 Dan Vanderkam《Effective TypeScript》第 9 条。