Записи TypeScript — отличный способ обеспечить согласованность при попытке реализовать более сложные типы данных. Они применяют ключевые значения и позволяют создавать настраиваемые интерфейсы для значений.
Звучит запутанно, но давайте посмотрим, как это работает на практике.
Типы утилит
Record — это служебный тип, то есть это тип, специально определенный в TypeScript для помощи в решении определенной проблемы.
Как работают типы записей машинописного текста
Предположим, у вас есть такой набор данных:
const myData = {
"123-123-123" : { firstName: "John", lastName: "Doe" },
"124-124-124" : { firstName: "Sarah", lastName: "Doe" },
"125-125-125" : { firstName: "Jane", lastName: "Smith" }
}
Наш набор данных имеет идентификатор для своего ключа, который имеет строковый тип. Все значения имеют одинаковый формат, то есть у них есть имя и фамилия.
Для этой структуры данных лучше всего использовать служебный тип Record. Мы можем определить тип нашей структуры данных следующим образом:
type User = { firstName: string, lastName: string }
const myData:Record<string, User> = { "123-123-123" : { firstName: "John", lastName: "Doe" }, "124-124-124" : { firstName: "Sarah", lastName: "Doe" }, "125-125-125" : { firstName: "Jane", lastName: "Smith" } }
Запись принимает форму Record<K, T>
, где K
— тип ключа, а T
— тип значений.
Выше мы определили новый тип User для наших значений и установили для наших ключей тип string.
Типы записей и типы объединения
Иногда у нас может быть объект с предопределенным набором возможных ключей. Это особенно верно при вызове из API. Например:
const myData = {
"uk" : { firstName: "John", lastName: "Doe" },
"france" : { firstName: "Sarah", lastName: "Doe" },
"india" : { firstName: "Jane", lastName: "Smith" }
}
Предположим, что для нашего набора данных выше ключ может принимать только три значения: Великобритания, Франция или Индия. В этом случае мы можем определить тип для пользователя и тип объединения для нашего ключа:
type User = { firstName: string, lastName: string } type Country = "uk" | "france" | "india";
const myData:Record<Country, User> = { "uk" : { firstName: "John", lastName: "Doe" }, "france" : { firstName: "Sarah", lastName: "Doe" }, "india" : { firstName: "Jane", lastName: "Smith" } }
Используя этот метод, мы можем применять строгие правила в отношении значений, которые разрешено использовать ключу, а также тип, которому должны соответствовать наши значения.
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.