gpt4 book ai didi

typescript - 实例化类的通用 TypeScript 函数

转载 作者:行者123 更新时间:2023-12-03 23:48:10 25 4
gpt4 key购买 nike

我开始编写一个通用的 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);

Try on TypeScript Playground

最佳答案

您可以通过使用 ConstructorParameters 来简化泛型类型的使用。和 InstanceType 实用程序类型:

function instantiate<T extends new (...args: any[]) => any>(
ctor: T, ...args: ConstructorParameters<T>
): InstanceType<T> {
return new ctor(...args);
}

关于typescript - 实例化类的通用 TypeScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61179226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com