TypeScript 4.9 的 satisfies 操作符

1,029 阅读1分钟

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 的一个子集。