fix: update ts - mapped types
This commit is contained in:
@@ -34,3 +34,50 @@ sidebar_position: 6
|
|||||||
- `Required<T>` – все свойства обязательные.
|
- `Required<T>` – все свойства обязательные.
|
||||||
- `Pick<T, K>` – выбирает только указанные ключи `K` из `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];
|
||||||
|
};
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user