Оператор satisfies

Изменения в новых версиях / TypeScript 4.9

// *** before: ***
type Colors = "red" | "green" | "blue";
const palette: Record<Colors, string | [number, number, number]> = {
    red: [255, 0, 0],
    green: "#00ff00",
    blue: [0, 0, 255],
};
// palette.red is string | [number, number, number] - never narrowed to the tuple

// *** in version 4.9: ***
const paletteChecked = {
    red: [255, 0, 0],
    green: "#00ff00",
    blue: [0, 0, 255],
} satisfies Record<Colors, string | [number, number, number]>;
//paletteChecked.red is exactly [number, number, number], and the keys are still
//checked