add typescript

This commit is contained in:
2025-02-28 14:39:31 +03:00
parent 7d94ca6021
commit 99dffd0a1d
135 changed files with 1098 additions and 349 deletions

View File

@@ -0,0 +1,86 @@
---
sidebar_position: 4
---
# Generic types
**Generics (обобщения)** в TypeScript — это механизм, который позволяет создавать универсальные, переиспользуемые компоненты (функции, классы, интерфейсы), которые могут работать с разными типами данных, сохраняя при этом безопасность типов.
## Зачем нужны Generics?
- **Повторное использование кода:** Generics позволяют писать универсальные функции и классы, которые могут работать с любыми типами.
- **Безопасность типов:** Generics сохраняют информацию о типах, что помогает избежать ошибок на этапе компиляции.
- **Гибкость:** Generics позволяют создавать компоненты, которые могут адаптироваться к разным типам данных.
## Примеры использования Generics
### 1. Функции с Generics
```ts
function identity<T>(arg: T): T {
return arg;
}
let output1 = identity<string>("Hello"); // Тип: string
let output2 = identity<number>(42); // Тип: number
```
**`T`** — это обобщенный тип (type parameter), который заменяется на конкретный тип при вызове функции.
### 2. Классы с Generics
```ts
class Box<T> {
private value: T;
constructor(value: T) {
this.value = value;
}
getValue(): T {
return this.value;
}
}
let box1 = new Box<string>("Hello");
let box2 = new Box<number>(42);
```
Класс **`Box`** может работать с любым типом данных, переданным в **`T`**.
### 3. Интерфейсы с Generics
```ts
interface Pair<T, U> {
first: T;
second: U;
}
let pair: Pair<string, number> = { first: "Age", second: 30 };
```
Интерфейс **`Pair`** может работать с двумя разными типами (**`T`** и **`U`**).
### 4. Ограничения Generics (Constraints)
Иногда нужно ограничить типы, которые можно передать в Generics. Для этого используется ключевое слово **`extends`**.
```ts
interface Lengthwise {
length: number;
}
function logLength<T extends Lengthwise>(arg: T): void {
console.log(arg.length);
}
logLength("Hello"); // ОК, у строки есть свойство length
logLength([1, 2, 3]); // ОК, у массива есть свойство length
logLength(42); // Ошибка: у числа нет свойства length
```
### 5. Generics по умолчанию
Можно указать тип по умолчанию для Generics, если тип не был передан явно.
```ts
function createArray<T = string>(length: number, value: T): T[] {
return Array(length).fill(value);
}
let strings = createArray(3, "x"); // string[]
let numbers = createArray<number>(3, 42); // number[]
```
## Преимущества Generics
- **Универсальность:** Generics позволяют писать код, который работает с разными типами.
- **Безопасность типов:** TypeScript проверяет типы на этапе компиляции, что помогает избежать ошибок.
- **Читаемость:** Generics делают код более выразительным и понятным.