TypeScript 4.9 的 satisfies 操作符表示,表达式 a 的类型满足类型 B 的一种情况。
有代码如下:
type Colors = "red" | "green" | "blue";
type RGB = [red: number, green: number, blue: number];
const palette: Record<Colors, string | RGB> = {
red: [255, 0, 0],
green: "#00ff00",
blue: [0, 0, 255]
};
表达式 palette.red 的类型为 string 或者数组,通过表达式我们确定 palette.red 就是数组,因为类型不匹配我们不能像这样 palette.red.join() 直接操作 palette.red。
像这样表达式 a 只满足类型 B 其中一种情况,可以使用 satisfies 操作符来做类型收窄。
const palette = {
red: [255, 0, 0],
green: "#00ff00",
blue: [0, 0, 255]
} satisfies Record<Colors, string | RGB>;
此时变量 palette 的类型就变得更加具体和表达式的值完全匹配:
const palette: {
red: [number, number, number];
green: string;
blue: [number, number, number];
}
这时就可以放心读取操作 palette 的属性了,例如:palette.red.join()
satisfies 适用情况:已知表达式 a 的类型是类型 B 的一个子集。