Sobes.tech
Назад к вопросам
Middle
2

Explain the differences between these TypeScript utility types and their use cases: ```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>>; ```

Компании, где спрашивали
WildberriesWildberries

Ответ от нейросети

sobes.tech AI

  • 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 необязателен