Type
- Типизация объектных типов данных
- Может экспортироваться
- Не может расширяться через extends, только через &
- Может иметь параметры
- Может генерироваться из объекта (keyof, typeof)
Опциональные поля
type TMassEditData = {
additionalStatusId: number | undefined;
hasOnlinePayment: boolean | undefined;
};
// можно записать так:
type TMassEditData = {
additionalStatusId?: number;
hasOnlinePayment?: boolean;
};
// можно экспортировать
export type TMassEditData = {
additionalStatusId?: number;
hasOnlinePayment?: boolean;
};
Type как аналог enum
type TDirection = 'left' | 'up' | 'right' | 'down';
type TProps = {
stroke?: string;
direction?: TDirection;
};
With params
type TSomeObj<T> = {
className: string;
count: number;
data: T;
};
// применение
const a: TSomeObj<string> = {
className: 'abc',
count: 10,
data: 'Some',
};
keyof
Ключи объекта. Можно использовать для типизации объектов с type и interface.
type TLikeButtonProps = {
className: string;
count: number;
size: number;
};
// ключи типа 'className' | 'count' | 'size'
type TLikeButtonKeys = keyof TLikeButtonProps;
// применение
const a: Record<TLikeButtonKeys, string> = {
className: 'some',
count: 'some',
};
keyof with Pick
type T2gisSchedulePicked = keyof Pick<
T2gisSchedule,
'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' | 'Sat' | 'Sun'
>;
// эквивалентно
type T2gisSchedulePicked =
| 'Mon'
| 'Tue'
| 'Wed'
| 'Thu'
| 'Fri'
| 'Sat'
| 'Sun';
typeof
Генерация типа из объекта.
const person = {
name: 'John',
surname: 'Smith',
age: 25,
};
type TGeneratedPerson = typeof person;
// эквивалентно
type TGeneratedPerson = {
name: string;
surname: string;
age: number;
};