satisfies(TS 4.9)在保留精确字面量类型的同时校验表达式是否满足目标类型:const route = { home: '/', user: '/user/:id' } satisfies Record<string, string>——route 的类型仍是精确的对象字面量(route.home 是 '/'),而标注 : Record<string, string> 会把值宽化成 string,as 则几乎不做校验。
三种写法对比:类型标注是「宽化加校验」,as 是「断言不校验」(漏字段、错类型都不报),satisfies 是「不宽化加校验」,兼得精确性与安全。典型场景:配置对象、路由表、主题色板、枚举映射——写错 key 或值类型立即报错,访问时保留字面量类型便于收窄。易错点:satisfies 不改变运行时行为;常和 as const 组合以同时锁定只读与字面量。追问:与 as const、const 类型参数的配合。
const palette = { primary: '#3b82f6', danger: '#ef4444' } satisfies Record<string, `#${string}`>