Как сделать тип универсальным typescript?

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

Пример создания универсального типа в TypeScript:

// Объявляем универсальный тип T
function identity<T>(arg: T): T {
    return arg;
}

// Используем универсальный тип для переменных
let output = identity<string>("hello");
let output2 = identity<number>(123);

// Можем не указывать явно тип, TypeScript сам его выведет
let output3 = identity(true);

В примере выше функция identity принимает аргумент типа T и возвращает его же. При вызове функции мы можем указать конкретный тип, с которым она будет работать, или использовать вывод типов TypeScript.

Универсальные типы также могут быть использованы при создании универсальных классов и интерфейсов:

// Универсальный класс Pair
class Pair<T, U> {
    constructor(public first: T, public second: U) {}
}

let pair = new Pair<number, string>(10, "hello");

// Универсальный интерфейс Printable
interface Printable<T> {
    print(): T;
}

class Printer<T> implements Printable<T> {
    constructor(private value: T) {}

    print(): T {
        console.log(this.value);
        return this.value;
    }
}

let printer = new Printer<number>(42);
printer.print();

Generics позволяют писать более обобщенный и многоразовый код, который может работать с различными типами данных без потери типовой безопасности. Важно помнить, что универсальные типы могут быть не только с одной переменной, но и с несколькими, что добавляет еще больше гибкости при разработке приложений на TypeScript.