Я намеревался написать обобщенную c функцию TypeScript, которая принимает конструктор класса в качестве аргумента, а также любые аргументы, требуемые конструктором, и возвращает новый экземпляр класса. Одно из моих требований заключается в том, что тип возвращаемого значения и типы аргументов конструктора должны выводиться компилятором.
После некоторых проб и ошибок я пришел к рабочей версии, которая, кажется, делает то, что мне нужно (см. Ниже). Но есть ли лучший способ добиться этого?
function instantiate<Params extends any[], Instance>(
ctor: new (...args: Params) => Instance, ...args: Params
) {
return new ctor(...args);
}
Пример использования:
class Circle {
constructor(public radius: number) {}
}
class Rectangle {
constructor(public width: number, public height: number) {}
}
const circle = instantiate(Circle, 5);
const rectangle = instantiate(Rectangle, 3, 7);
Попробуйте на TypeScript Playground