Typescript 从它的通用类型 <T> 中实例化一个 class
Typescript Instantiate a class from it's generic type <T>
我有一个通用的钩子,将我想要的那种对象的类型传递给 return 给我,但我卡住了,因为我无法实例化一个 class来自它的通用类型。
我的代码如下所示:
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);
我有一个通用的钩子,将我想要的那种对象的类型传递给 return 给我,但我卡住了,因为我无法实例化一个 class来自它的通用类型。
我的代码如下所示:
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);