TypeScriptУрок 11 из 16
readonly и утилитарные типы
Утилитарные типы строят новый тип из существующего, так что описывать его заново не нужно. Это встроенные в TypeScript дженерики.
Главное
- Readonly<T> и поле readonly запрещают перезапись.
- Partial<T> делает все поля необязательными — удобно для обновлений.
- Pick<T, "a" | "b"> оставляет только перечисленные поля, Omit<T, "id"> убирает их.
- Record<K, V> — объект с ключами K и значениями V.
- readonly string[] — массив без push и других изменяющих методов.
Пример
interface Profile { readonly id: number; name: string; email: string;} type ProfileUpdate = Partial<Profile>; // every field becomes optionaltype PublicProfile = Pick<Profile, "id" | "name">; // only these two fieldstype NewProfile = Omit<Profile, "id">; // everything except idtype Scores = Record<string, number>; // keys are strings, values are numbers const patch: ProfileUpdate = { name: "Sam" };const card: PublicProfile = { id: 7, name: "Sam" };const draft: NewProfile = { name: "Kim", email: "kim@example.com" };const scores: Scores = { math: 5, art: 4 };// card.id = 8; // error: 'id' is read-only const week: readonly string[] = ["Mon", "Tue"];// week.push("Wed"); // error: push does not exist on readonly string[] console.log(`${patch.name} #${card.id}, ${draft.name}, math ${scores.math}, ${week.length} days`);Из одного Profile получились четыре типа, и ни одно поле не описано дважды. Если Profile изменится, производные типы обновятся сами.
Задание
Как пользоваться редактором⌘ Enter или Ctrl Enter — запустить код, ⇧ ⌘ Enter — проверить задание.Tab и Shift Tab сдвигают строку или выделение; Esc, затем Tab — выйти из редактора.Проверка сравнивает то, что напечатала программа, с заданием; пробелы в конце строк не важны.После двух неудачных проверок можно открыть решение. Ваш код сохраняется в этом браузере.Сделайте defaults доступным только для чтения, patch — Partial, а summary — Pick из двух полей, добавьте titles через Record и выведите «Default: light, 16px», «Mine: dark, 18px», «Night mode».
Вывод
Здесь появится то, что напечатает программа.