satisfies(TS 4.9+)检查一个值符合一个类型而不扩大该值的推断类型。它在验证约束的同时保留精确的、字面的类型以供后续使用 — 这是注解和推断的最好结合。
它解决的问题
ts
= <, | >;
: = { : , : };
a..();
b = { : , : } ;
b..();
b..();
satisfies(TS 4.9+)检查一个值符合一个类型而不扩大该值的推断类型。它在验证约束的同时保留精确的、字面的类型以供后续使用 — 这是注解和推断的最好结合。
= <, | >;
: = { : , : };
a..();
b = { : , : } ;
b..();
b..();
使用注解,b 会被类型化为宽泛的 Config。使用 satisfies,b 保持其精确的形状 { host: string; port: number } 并且被检查为有效的 Config。
const routes = {
home: "/",
user: "/users/:id",
} satisfies Record<string, string>;
type RouteName = keyof typeof routes; // "home" | "user" — exact keys preserved
as vs 注解: T — 检查,但扩大到 T(失去详细信息)。as T — 强制类型,没有真正的检查(不安全)。satisfies T — 针对 T 检查,保持狭窄的推断类型(安全 + 精确)。satisfies 让你验证对象是否匹配接口/约束,同时仍然获得用于自动完成、类型缩小和 keyof 的精确字面类型。
它非常适合配置对象、路由映射、主题调色板和常量查询,在这些地方你既想要正确性又想要精确推断。