fix: update ts - mapped types

This commit is contained in:
2025-10-22 11:48:29 +03:00
parent cbb96c2a37
commit c1148c6078

View File

@@ -33,4 +33,51 @@ sidebar_position: 6
- `Partial<T>` все свойства необязательные.
- `Required<T>` все свойства обязательные.
- `Pick<T, K>` выбирает только указанные ключи `K` из `T`.
- `Record<K, V>` создаёт тип с ключами `K` и значениями `V`.
- `Record<K, V>` создаёт тип с ключами `K` и значениями `V`.
Пример из практики:
```ts
interface Movie {
title: string;
director: string;
awards?: string;
}
type Keys = keyof Movie; // это обычный union 'title' | 'director' | 'awards'
// Mapped type
type MovieCopy = {
[Property in keyof Movie]: number; // Property переменная, в результате просто изменится тип на number у всех ключей
};
// делаем все поля только для чтения
type ReadonlyMovie = {
readonly [Property in keyof Movie]: Movie[Property];
};
// делаем все поля опциональными
type OptionalMovie = {
readonly [Property in keyof Movie]?: Movie[Property];
};
// делаем все поля обязательными
type RequiredMovie = {
readonly [Property in keyof Movie]-?: Movie[Property];
};
// убираем readonly из всех полей
type EditableMovie = {
-readonly [Property in keyof Movie]-?: Movie[Property];
};
type MovieSetters = {
[Property in keyof Movie as `set${Capitalize<Property>}`]-?: (
value: Movie[Property]
) => void;
};
type MovieGetters = {
[Property in keyof Movie as `set${Capitalize<Property>}`]-?: () => Movie[Property];
};
```