Алоха товарищи фронты! Я знаю что это не самая новая фича в TS, но я думаю что далеко не все знают о об этом операторе и уверен что многим будет это полезно.
И так что делает оператор:
Позволяет нам проверить соответствие выражения некоторому типу, не меняя сам тип. Это помогает при работе с объектами со смешанными типами данных.
Рассмотрим на примере:
type FormFields = "name" | "surname" | "age";const data: Record<FormFields, number | string> = {name: "name",surname: "surname",age: 21,}
const newAge = data.age * 2;const nameUpperCase = data.name.toUpperCase();❗️ Объект
data имеет как числовые, так и строковые значения, поэтому при работе с этим объектом мы получаем следующие ошибки:The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.Property 'toUpperCase' does not exist on type 'string | number'.Property 'toUpperCase' does not exist on type 'number'.Вот тут-то нам и поможет оператор
satisfies.type FormFields = "name" | "surname" | "age";const data = { name: "name", surname: "surname", age: 21,} satisfies Record<FormFields, string | number>const newAge = data.age * 2;const nameUpperCase = data.name.toUpperCase();Также оператор
satisfies можно использовать для отлова некоторых ошибок. Например, для проверки объектов на наличие ключей, соответствующих заданному типу:type FormFields = "name" | "surname" | "age";const data = { name: "name", surname: "surname", age: 21, passport: {}} satisfies Record<FormFields, string | number>Надеюсь что было полезно. В общем удачи в экспериментах!