Специальные типы TypeScript

Шпаргалка по основным типам Utility Types. Для наглядности возьмём интерфейс Todo и проделаем с ним некоторые манипуляции.

interface Todo {
  title: string
  author: string
  status: string
  description?: string
}

Partial

Все свойства опциональны

// все необязательные
type PartialProps = Partial<Todo>

{
  title?: string | undefined
  author?: string | undefined
  status?: string | undefined
  description?: string | undefined
}

Required

Помечает все свойства обязательными, противоположность Partial

// все обязательные
type RequiredProps = Required<Todo>

{
  title: string;
  author: string;
  status?: string
  description: string;
}

Pick

Взять из указанного типа только перечисленные свойства

// взять только указанные поля
type PickProps = Pick<Todo, 'title' | 'status'>

{
  title: string
  status: string
}

Omit

Взять из указанного типа всё, кроме перечисленных свойств. Противоположность Pick

// взять все кроме title и status
type OmitProps = Omit<Todo, 'title' | 'status'>

{
  author: string
  description?: string
}

Record

Дженерик, ключи которого - свойства первого типа, а значения - свойства второго.

type Guests = 'jack' | 'john'

interface Personal {
  name: string
}

const users: Record<Guests, Personal> = {
  jack: { name: 'Jack' },
  john: { name: 'Jaohn' },
}

Awaited

Указание на ожидание операции async/await

type AwaitTodo = Awaited<Promise<Todo>>;

Exclude

Исключить из первого типа совпадения со вторым.

type symbols = 'a' | 'b' | 'c' | 'd' | 'b'
type ExcludeProps = Exclude<symbols, 'a' | 'b'> // "c" | "d"

Extract

Оставить только совпадения. Противоположность Exclude.

type symbols = 'a' | 'b' | 'c' | 'd' | 'b'
type ExctractProps = Extract<symbols, 'a' | 'b'> // "a" | "b"