实例化 类 的通用 TypeScript 函数
Generic TypeScript function that instantiates classes
我着手编写一个通用的 TypeScript 函数,它将 class 构造函数以及构造函数所需的任何参数作为参数,return 是 class。我的要求之一是 return 类型和构造函数参数类型必须由编译器推断。
经过反复试验,我想出了一个似乎可以满足我需要的工作版本(见下文)。但是,有没有更好的方法来实现这一点?
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);
您可以通过使用 ConstructorParameters
and InstanceType
实用程序类型来简化泛型类型的使用:
function instantiate<T extends new (...args: any[]) => any>(
ctor: T, ...args: ConstructorParameters<T>
): InstanceType<T> {
return new ctor(...args);
}
我着手编写一个通用的 TypeScript 函数,它将 class 构造函数以及构造函数所需的任何参数作为参数,return 是 class。我的要求之一是 return 类型和构造函数参数类型必须由编译器推断。
经过反复试验,我想出了一个似乎可以满足我需要的工作版本(见下文)。但是,有没有更好的方法来实现这一点?
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);
您可以通过使用 ConstructorParameters
and InstanceType
实用程序类型来简化泛型类型的使用:
function instantiate<T extends new (...args: any[]) => any>(
ctor: T, ...args: ConstructorParameters<T>
): InstanceType<T> {
return new ctor(...args);
}