
[英]Is there a way to get the name of the generic type in a generic (<T>) function/class (Typescript)?
[英]Typescript Instantiate a class from it's generic type <T>
我有一个通用钩子,将我希望它返回给我的那种对象的类型传递给我,但是我被卡住了,因为我无法从它的通用类型实例化一个类。
这是我的代码的样子:
export function useMyCustomHook<T>(): [data: string]{
// some stuff here
const foo = new T(...parameters); // how could I get something generic here, I'm gonna have multiple implementations passing a class object model differents
return [data];
}
我很感激这方面的任何帮助,我尝试过工厂方法但没有成功。
非常感谢你的帮助。
安托万
通常 TS 函数是
function foo<Type>(arg: Type): Type {
return arg;
}
或者
function foo<Type>(arg: Type[]): Type[] {
console.log(arg.length);
return arg;
}
你在做这样的事情吗
class Name {
firstName = 'John';
lastName = 'Doe';
}
class Factory {
create<T>(type: (new () => T)): T {
return new type();
}
}
let factory = new Factory();
let person = factory.create(Name);
如您所见,特殊部分是类型(new () => T)
,它描述了具有空构造函数的类型。 对 create 的调用几乎尽可能简单,如果需要,您还可以向泛型类型参数添加约束。
这是我解决问题的方法:
function factory<T>(GenericRowType: { new (...parameters): T }, ...parameters): T {
return new GenericRowType(...parameters);
}
export function useMyCustomHook<T>(): [data: string]{
// some stuff here
const rowTyped: T = factory(GenericRowType, ...toolsFailuresHistoryRow, dateOfTheData);
return [data];
}
const[data] = useMyCustomHook(RundeckToolFailures);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.