diff --git a/docs/testing/02-fronend-test.md b/docs/testing/02-fronend-test.md index 1b71ae6..856e8e0 100644 --- a/docs/testing/02-fronend-test.md +++ b/docs/testing/02-fronend-test.md @@ -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/)** \ No newline at end of file +🚀 **Источник: [Тестирование приложений React: Лучшие практики и инструменты](https://open.zeba.academy/testirovanie-prilozheniy-react-luchshie-praktiki-instrumenty/)** \ No newline at end of file diff --git a/docs/typescript/06-mapped-types.md b/docs/typescript/06-mapped-types.md new file mode 100644 index 0000000..7835be3 --- /dev/null +++ b/docs/typescript/06-mapped-types.md @@ -0,0 +1,36 @@ +--- +sidebar_position: 6 +--- + +# Mapped types + +**Mapped Types** в TypeScript позволяют создавать новые типы на основе существующих, применяя преобразования к каждому свойству. + +🚀**Mapped Types** помогают гибко манипулировать типами, уменьшая дублирование кода. + +## Основные возможности: +1. **Итерация по ключам** \ + Можно перебрать ключи одного типа (**`keyof`**) и создать новый: + ```ts + type Optional = { [K in keyof T]?: T[K] }; + ``` + Это сделает все свойства **`T`** необязательными. + +2. **Модификаторы** (`readonly`, `?`) \ + Можно добавлять или удалять модификаторы: + ```ts + type Readonly = { readonly [K in keyof T]: T[K] }; + type Mutable = { -readonly [K in keyof T]: T[K] }; // Удаляет `readonly` + ``` + +3. **Фильтрация ключей** \ + Через **`as`** в TypeScript 4.1+ можно фильтровать или преобразовывать ключи: + ```ts + type OnlyStrings = { [K in keyof T as T[K] extends string ? K : never]: T[K] }; + ``` + +Примеры встроенных mapped types: +- `Partial` – все свойства необязательные. +- `Required` – все свойства обязательные. +- `Pick` – выбирает только указанные ключи `K` из `T`. +- `Record` – создаёт тип с ключами `K` и значениями `V`. \ No newline at end of file diff --git a/docs/typescript/06-type-guards.md b/docs/typescript/07-type-guards.md similarity index 99% rename from docs/typescript/06-type-guards.md rename to docs/typescript/07-type-guards.md index f784a6d..7012a54 100644 --- a/docs/typescript/06-type-guards.md +++ b/docs/typescript/07-type-guards.md @@ -1,5 +1,5 @@ --- -sidebar_position: 6 +sidebar_position: 7 --- # Type guards diff --git a/docs/typescript/07-enums-vs-as-const.md b/docs/typescript/08-enums-vs-as-const.md similarity index 99% rename from docs/typescript/07-enums-vs-as-const.md rename to docs/typescript/08-enums-vs-as-const.md index 10f3691..cdeadb1 100644 --- a/docs/typescript/07-enums-vs-as-const.md +++ b/docs/typescript/08-enums-vs-as-const.md @@ -1,5 +1,5 @@ --- -sidebar_position: 7 +sidebar_position: 8 --- # Enums и as const diff --git a/docs/typescript/08-namespaces.md b/docs/typescript/09-namespaces.md similarity index 98% rename from docs/typescript/08-namespaces.md rename to docs/typescript/09-namespaces.md index 4fda518..b8b1910 100644 --- a/docs/typescript/08-namespaces.md +++ b/docs/typescript/09-namespaces.md @@ -1,5 +1,5 @@ --- -sidebar_position: 8 +sidebar_position: 9 --- # Namespaces diff --git a/docs/typescript/09-decorators.md b/docs/typescript/10-decorators.md similarity index 99% rename from docs/typescript/09-decorators.md rename to docs/typescript/10-decorators.md index 04c2e0f..175ec4b 100644 --- a/docs/typescript/09-decorators.md +++ b/docs/typescript/10-decorators.md @@ -1,5 +1,5 @@ --- -sidebar_position: 9 +sidebar_position: 10 --- # Декораторы