Объясните различия между этими типами утилит TypeScript и их случаи использования:

PartialT — делает все свойства типа T необязательными.

Короткий ответ

Что ответить на собеседовании

Partial<T> — делает все свойства типа T необязательными.

Подробный разбор

Ответ с пояснениями

Условие

Объясните различия между этими типами утилит TypeScript и их случаи использования:

type someType1<T extends object> = Partial<T>;

type someType2<T extends object> = T[keyof T];

type someType3<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

type SomeType4<T extends object, K extends keyof T = keyof T> = Omit<T, K> & Partial<Pick<T, K>>;

Ответ

  • Partial<T> — делает все свойства типа T необязательными. Используется, когда нужно создать объект, в котором можно указать только часть свойств исходного типа.
  • T[keyof T] — это индексный доступ, который возвращает объединение типов всех значений свойств объекта T. Например, если T — это {a: string; b: number}, то T[keyof T] будет string | number.
  • Pick<T, Exclude<keyof T, K>> — выбирает из типа T все свойства, кроме тех, что указаны в K. Exclude исключает ключи K из всех ключей T, а Pick выбирает оставшиеся. Это эквивалентно Omit<T, K>.
  • Omit<T, K> & Partial<Pick<T, K>> — создает тип, где свойства из K становятся необязательными, а остальные остаются обязательными. Это полезно, когда нужно сделать часть свойств опциональными, сохраняя остальные обязательными.

Пример использования SomeType4:

interface User {
  id: number;
  name: string;
  email: string;
}

// Сделаем email необязательным
type UserWithOptionalEmail = SomeType4<User, 'email'>;

const user1: UserWithOptionalEmail = { id: 1, name: 'Alice' }; // email необязателен

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее