用途:指导在 TypeScript 中正确使用 satisfies 操作符,并与类型注解(冒号)、as 断言做对比,帮助在“校验表达式是否符合某类型”与“保留推断出的窄类型”之间做选择。
主要能力:satisfies 会校验表达式匹配指定类型,但不改变推断出的类型;类型注解则会把类型“加宽”。资料引用 Matt Pocock 的说法:用冒号时“类型胜过值”,用 satisfies 时“值胜过类型”。例如 const url1: RoutingPathname = "/products" 推断为联合类型 RoutingPathname,而 const url2 = "/products" satisfies RoutingPathname 保留字面量 '/products'。
典型用法:对象校验并保留属性类型。用 Record<Colors, string | RGB> 注解会丢失具体属性类型,导致 palette1.green.toUpperCase() 报错;改用 satisfies 后既能捕获拼写错误(如 bleu),又能让 palette2.green 推断为 string。
选择建议:需要变量后续可重新赋值为联合类型中其他值、或明确想要更宽类型时用冒号注解;想要变量精确类型、且类型较复杂需要校验时用 satisfies;as 是“对 TS 撒谎”的逃生舱,应少用;无注解让 TS 推断是最常见做法。
常见模式:as const satisfies 结合不可变与校验,如 const routes = { home: "/", products: "/products", cart: "/cart" } as const satisfies Record<string, string>,routes.home 推断为只读字面量 '/'。资料建议在同时需要校验与字面量保留时优先用 as const satisfies,而非类型注解。
适用场景:配置对象、事件处理器映射、用 Record 做穷尽检查(如 Status 联合类型新增成员时会报错)、以及 Locale 等映射表校验。
限制:资料未提供该技能的具体安装或调用方式、平台与收费信息,暂未提供。