feat: add mapped types in ts section

This commit is contained in:
2025-05-26 09:44:03 +03:00
parent 1a18557ec6
commit 26053787a5
6 changed files with 41 additions and 5 deletions

View File

@@ -340,4 +340,4 @@ test('My first test', async t => {
});
```
🚀 **Источник: [https://open.zeba.academy/testirovanie-prilozheniy-react-luchshie-praktiki-instrumenty/](https://open.zeba.academy/testirovanie-prilozheniy-react-luchshie-praktiki-instrumenty/)**
🚀 **Источник: [Тестирование приложений React: Лучшие практики и инструменты](https://open.zeba.academy/testirovanie-prilozheniy-react-luchshie-praktiki-instrumenty/)**

View File

@@ -0,0 +1,36 @@
---
sidebar_position: 6
---
# Mapped types
**Mapped Types** в TypeScript позволяют создавать новые типы на основе существующих, применяя преобразования к каждому свойству.
🚀**Mapped Types** помогают гибко манипулировать типами, уменьшая дублирование кода.
## Основные возможности:
1. **Итерация по ключам** \
Можно перебрать ключи одного типа (**`keyof`**) и создать новый:
```ts
type Optional<T> = { [K in keyof T]?: T[K] };
```
Это сделает все свойства **`T`** необязательными.
2. **Модификаторы** (`readonly`, `?`) \
Можно добавлять или удалять модификаторы:
```ts
type Readonly<T> = { readonly [K in keyof T]: T[K] };
type Mutable<T> = { -readonly [K in keyof T]: T[K] }; // Удаляет `readonly`
```
3. **Фильтрация ключей** \
Через **`as`** в TypeScript 4.1+ можно фильтровать или преобразовывать ключи:
```ts
type OnlyStrings<T> = { [K in keyof T as T[K] extends string ? K : never]: T[K] };
```
Примеры встроенных mapped types:
- `Partial<T>` все свойства необязательные.
- `Required<T>` все свойства обязательные.
- `Pick<T, K>` выбирает только указанные ключи `K` из `T`.
- `Record<K, V>` создаёт тип с ключами `K` и значениями `V`.

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 6
sidebar_position: 7
---
# Type guards

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 7
sidebar_position: 8
---
# Enums и as const

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 8
sidebar_position: 9
---
# Namespaces

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 9
sidebar_position: 10
---
# Декораторы