Модульні уроки (2/2)
Відображені типи
Відображені типи дозволяють створювати нові типи, перетворюючи властивості існуючих один за одним. Вони побудовані на основі синтаксису циклу над ключами за допомогою оператора keyof.
type Mapped<T> = {
[P in keyof T]: T[P];
};Цей приклад показує зіставлений тип, ідентичний вихідному: він повторює кожен ключ P в keyof T та призначає той самий тип T[P].
Модифікатори мінливості та необов'язковості
Ми можемо додавати або видаляти такі модифікатори, як readonly та ? (необов’язково), додавши до них префікс + (додати, за умовчанням) або - (видалити).
Наприклад, щоб видалити необов’язковість з усіх властивостей типу (зробивши їх обов’язковими):
type Concrete<T> = {
[P in keyof T]-?: T[P];
};Модифікатор -? видаляє прапор необов’язковості з кожної властивості.
Перепризначення ключів за допомогою as
У TypeScript 4.1+ ви можете перевідображати ключі в зіставленому типі за допомогою пропозиції as і типів літеральних шаблонів.
type WriteSetters<T> = {
[K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void;
};Тут ми змінюємо назву кожної властивості K на set[CapitalizedKey] та змінюємо її тип на функцію налаштування.
Спробуйте самі
Вправа 1: Зробити властивості Nullable
Оголошіть загальний зіставлений тип Nullable<T>, який приймає об’єкт T і перетворює кожну властивість так, щоб він також міг приймати значення null (наприклад, T[K] | null).
Показати підказку
Використовуйте синтаксис [K у ключі T]: T[K] | нульовий; всередині об’єкта зіставленого типу.
Рішення доступне після 3 спроб
Вправа 2: Створення динамічних геттерів за допомогою as
Створіть відображений тип під назвою GetterNames<T>, який перетворює ключі об’єкта T, додаючи до них префікс «get» і вводячи початковий ключ з великої літери (використовуйте «Введення з великої літери»). Наприклад, якщо ключ є name, він має стати getName. Встановіть тип властивостей () => T[K].
Показати підказку
Використовуйте як \`get\${Capitalize<string & K>}\`, щоб перевідобразити ключ і () => T[K] як тип повернення властивості.
Рішення доступне після 3 спроб