Шпаргалка по основным типам 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"