gpt4 book ai didi

generics - 带有类参数的泛型类型推断

转载 作者:搜寻专家 更新时间:2023-10-30 20:32:30 24 4
gpt4 key购买 nike

我在根据我传入的类型定义泛型类型时遇到问题。

我有一段代码“激活”了一个类,我无法从类型参数中获取类型信息,所以我传入了类对象(不是实例)。然而,这打破了类型推断。

这是我正在尝试做的一个简化示例:

interface IActivatable {
id: number;
name:string;
}

class ClassA implements IActivatable {
public id: number;
public name: string;
public address:string;
}

class ClassB implements IActivatable {
public id: number;
public name: string;
public age: number;
}

function activator<T extends IActivatable>(type:T): T {
// do stuff to return new instance of T.
}

var classA:ClassA = activator(ClassA);

到目前为止,我能想到的唯一解决方案是将 type 参数的类型更改为 any 并手动设置通用类型 (如下所示)。然而,这似乎很啰嗦,是否有另一种方法可以实现这一目标。

function activator<T extends IActivatable>(type:any): T {
// do stuff to return new instance of T.
}

var classA:ClassA = activator<ClassA>(ClassA);

感谢您提供的任何帮助。

最佳答案

根据语言规范,您需要通过构造函数来引用类类型。因此,不要使用 type:T,而是使用 type: { new(): T;},如下所示:

function activator<T extends IActivatable>(type: { new(): T ;} ): T {
// do stuff to return new instance of T.
return new type();
}

var classA: ClassA = activator(ClassA);

关于generics - 带有类参数的泛型类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24677592/

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