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);