繁体   English   中英

Typescript 从它的泛型类型实例化一个类<T>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM