Sobes.tech
Middle
138
questionbank

Что такое дженерики?

Ответ от нейросети

sobes.tech AI

Дженерики (generics) в TypeScript позволяют создавать компоненты (функции, классы, интерфейсы), которые могут работать с различными типами данных, при этом сохраняя безопасность типов. Они позволяют писать более гибкий и переиспользуемый код, не теряя при этом преимуществ статической типизации. Самый простой пример – использование дженериков в функциях для возврата того же типа, что и был передан в качестве аргумента.

// Функция, которая принимает аргумент любого типа и возвращает его
function identity<T>(arg: T): T {
    return arg;
}

// Использование дженерика с конкретным типом - string
let outputString = identity<string>("строка"); // Тип outputString будет string

// Использование дженерика с автоматическим выведением типа данных - number
let outputNumber = identity(123); // Тип outputNumber будет number

Дженерики можно использовать в классах:

// Класс, работающий с элементами любого типа
class GenericBox<T> {
    value: T;
    constructor(initialValue: T) {
        this.value = initialValue;
    }
}

// Создание экземпляра GenericBox с типом string
let stringBox = new GenericBox<string>("привет");
// Создание экземпляра GenericBox с типом boolean
let booleanBox = new GenericBox(true); // TypeScript выведет тип

И в интерфейсах:

// Интерфейс с дженериком
interface KeyValuePair<K, V> {
    key: K;
    value: V;
}

// Использование интерфейса с конкретными типами
let stringNumberPair: KeyValuePair<string, number> = { key: "возраст", value: 30 };

Преимущества использования дженериков:

  • Повторное использование кода: Одну структуру можно использовать с разными типами данных.
  • Безопасность типов: Компилятор проверяет типы во время компиляции, предотвращая потенциальные ошибки.
  • Читаемость и поддерживаемость: Код становится более понятным, так как явно видно, с какими типами работает компонент.

Дженерики часто используются в библиотеках и фреймворках, таких как React (для типизации пропсов компонентов), Redux (для типизации store), а также при работе с коллекциями данных.