ts的4.9属性之satisfies

interface Palette {
    red: number[];
    green: string;
    blue: number[];
    black?: boolean;
}

type Colors = 'red' | 'green' | 'blue';
type RGB = [number, number, number];

const palette = {
    red: [255, 0, 0],
    green: '#00ff00',
    blue: [0, 0, 255]
} satisfies Record<Colors, RGB | string> as Palette;

// 当使用 as Record<Colors, RGB | string>; 时,推断不出属性的具体类型,当使用 satisfies Record<Colors, RGB | string>时,可以推断具体类型
palette.green.startsWith('#'); // √ boolean
palette.red.find((x) => true); // × 类型“number[]”上不存在属性“startsWith”。
palette.blue.entries(); //

const config = {
    name: 'app-1',
    version: '2.0',
    service: 'users'
} satisfies Record<string, string>;

// const config:Record<string, string> 这样的写法无法在调用属性的时候获取自动提示,satisfies的话可以让系统自动推断类型
config.name = '123';

 

posted @ 2023-05-11 10:36  洛晨随风  阅读(193)  评论(0编辑  收藏  举报