Раньше была частая проблема: если задаёшь объекту строгий тип (например, Record), то TypeScript забывает, где у тебя строка, а где массив. Из-за этого нельзя было просто так вызвать .toUpperCase() у строки без лишних проверок.
Оператор satisfies решает это идеально:
1. Он ПРОВЕРЯЕТ, что объект соответствует типу.
2. Но НЕ СУЖАЕТ автовыведенные типы полей!
type Colors = "red" | "green" | "blue"
type RGB = [red: number, green: number, blue: number]
const palette = {
red: [255, 0, 0],
green: "#00ff00",
blue: [0, 0, 255],
} satisfies Record<Colors, string | RGB>
const greenNormalized = palette.green.toUpperCase()
Теперь TS точно знает, что palette.green это именно string, и спокойно даёт крутить с ним любые строковые методы.
Код и примеры закинул в конспекты, двигаемся дальше 🚀