Pick

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

Pick — один из базовых utility types в TypeScript, который позволяет создать новый тип, выбрав только нужные свойства из существующего. Это как взять большой объект и оставить от него только то, что реально понадобится.

Синтаксис: Pick, где T — исходный тип, а K — ключи, которые хотим оставить.

  • Удобно для создания DTO Data Transfer Object — объект для передачи данных
  • Помогает не дублировать описания типов
  • Делает код более читаемым и поддерживаемым

Пример: Pick создаст тип только с полями id и name.

В этом интерактивном тренажере вы на практике разберётесь, как работает Pick и когда его применять.

Список тем

1. Базовый синтаксис Pick

id: 40724_pick_01_syntax

В этом задании вам нужно использовать utility type Pick, чтобы создать новый тип, содержащий только определенные поля из существующего интерфейса. Дан интерфейс User с полями id, name, email, age. Заполните пропуски в коде, чтобы определить тип UserBasic, который включает только поля id и name.

Заполните пропуски
interface User {
  id: number;
  name: string;
  email: string;
  age: number;
}

type UserBasic = input1S<User, input2S>;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Исправить ошибку в Pick

id: 40724_pick_03_error

В этом фрагменте кода TypeScript используется утилитный тип Pick для создания нового типа, который должен содержать только определённые поля из исходного интерфейса. Однако в коде допущена ошибка: указан несуществующий ключ (опечатка в названии поля). Найдите и исправьте эту опечатку, чтобы тип Pick корректно выбрал нужное свойство.

Найдите ошибку и исправьте
interface User {
  id: number;
  name: string;
  email: string;
}
 
type UserName = Pick<User, 'nam'>;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Сопоставь Pick и результат

id: 40724_pick_04_compare

В левой колонке приведены различные выражения с использованием утилити-типа Pick на основе базового интерфейса User. В правой колонке — типы, которые получаются в результате этих выражений. Сопоставьте каждое выражение слева с соответствующим результирующим типом справа. Обратите внимание, что в правой колонке нет лишних вариантов, но порядок типов перемешан.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
Pick<User, "id">
Pick<User, "name" | "email">
Pick<User, "age" | "isActive">
Pick<User, "id" | "name" | "email">
Pick<User, "isActive">
{ name: string; email: string; }
{ id: number; }
{ isActive: boolean; }
{ id: number; name: string; email: string; }
{ age: number; isActive: boolean; }
Сообщения
Проверить
Показать подсказку

4. Выбери правильные ключи

id: 40724_pick_05_select

В этом задании вам предстоит использовать утилиту Pick для создания нового типа на основе существующего интерфейса. Дан интерфейс User, содержащий различные поля пользователя. Вам нужно создать тип RegistrationForm, который будет содержать только те поля, которые необходимы для формы регистрации: имя, email и пароль. В коде ниже заполните пропуски, выбрав из выпадающего списка правильные ключи интерфейса User. Обратите внимание, что ключи должны быть строковыми литералами и соответствовать именам полей в интерфейсе.

Нужно правильно расставить в пропуски предложенные варианты
interface User {
  id: number;
  name: string;
  email: string;
  password: string;
  age: number;
  address: string;
  phone: string;
}

// Создайте тип для формы регистрации, используя Pick
type RegistrationForm = Pick<User, input1S | input2S | input3S>;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Собери тип с Pick

id: 40724_pick_06_build

Из предложенных строк соберите корректную TypeScript-программу, которая определяет интерфейс User, создаёт тип UserBasicInfo с помощью утилиты Pick, выбирая свойства 'id' и 'name', и объявляет функцию, использующую этот тип.

Перетяните в правильном порядке строки из одного блока в другой
interface User {
  id: number;
  name: string;
  email: string;
}
type UserBasicInfo = Pick<User, 'id' | 'name'>;
function displayUserInfo(user: UserBasicInfo) {
  console.log(`ID: ${user.id}, Name: ${user.name}`);
}
type UserWithoutEmail = Omit<User, 'email'>;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Найди использование Pick

id: 40724_pick_07_click

Внимательно изучите приведённый фрагмент кода на TypeScript. В нём используются различные Utility Types для создания новых типов на основе существующего типа `User`. Ваша задача — найти и выделить кликом только те строки, где применяется именно Utility Type `Pick`. Не отмечайте строки, где используются `Omit`, `Partial`, `Record` или другие конструкции.

Кликните по всем фрагментам, которые подходят под условие задания.
type User = { id: number; name: string; email: string; age: number; }; {{type UserBasicInfo = Pick;~|~t1}} {{type UserWithoutEmail = Omit;~|~t2}} {{type PartialUser = Partial;~|~t3}} {{type UserMap = Record;~|~t4}} {{type UserContactInfo = Pick;~|~t5}} {{type AdminUser = User & { role: string };~|~t6}} {{type ReadonlyUser = Readonly;~|~t7}} {{type UserIds = Pick;~|~t8}}
Сообщения
Проверить
Показать подсказку

7. Сколько свойств в типе

id: 40724_pick_08_give

В данном задании рассматривается использование утилитарного типа Pick в TypeScript для создания новых типов путём выбора определённых свойств из существующего интерфейса. Изучите приведённый фрагмент кода, в котором определён интерфейс с шестью полями и применена цепочка преобразований с помощью Pick. Ваша задача — определить, сколько свойств останется в финальном типе после всех преобразований. Введите ответ в виде одного целого числа.

Что должно получиться?
interface Person {
    id: number;
    name: string;
    age: number;
    email: string;
    phone: string;
    address: string;
}

type FirstPick = Pick<Person, 'id' | 'name' | 'age' | 'email'>;
type FinalType = Pick<FirstPick, 'id' | 'name' | 'age'>;

// Сколько свойств содержит тип FinalType?
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40724_compiler
TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру