generics - Typescript 中的通用工厂参数

标签 generics typescript

这是通用工厂的官方 Typescript 文档中的示例。在此示例中,构造函数不带参数。

function create<T>(c: {new(): T; }): T {
  return new c();
}

我如何重写它,以便除了类型之外,工厂方法还接受其他参数并在调用它正在实例化的类的构造函数时传递它们?所以 return 语句看起来像这样:
return c(p1, p2);

我不清楚的是,这
{new(): T; }

实际上是一个接口(interface),因为它定义了对提议的类的兼容性的评估条款,顺便还声明了构造函数签名。我要回答我自己的问题。

最佳答案

这就是我要做的:

module Factory {
    export function createInstance<T extends Wibble, K extends IRaw1>(ctor: { new (raw: K): T }, data: K): T {
        return new ctor(data);
    }
}
var raw1 = { Foo: "foo" } as IRaw1;
var d1 = Factory.createInstance(Wibble, raw1);

var raw2 = { Foo: "foo", Bar: "bar" } as IRaw2;
var d2 = Factory.createInstance(Wobble, raw2);

如果您的构造函数需要更多参数,那么只需将它们添加到您传递给 ctor 的一个对象中,这样您就不需要为每个参数添加更多通用约束。

关于generics - Typescript 中的通用工厂参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42804182/

相关文章:

generics - make函数检测类型模型数据时的“Cannot use T as a reified type parameter”

angular - 如何订阅变量变化?

typescript :如何将定义分解成单独的文件

javascript - 从日期数组返回唯一日期数组

java - 如何创建已知类型 : Class<List<String>> 的类文字

c# - 如何获取作为函数传递的匿名方法的参数值?

javascript - Typescript:如何从类型中定义严格的常量

java - 这个 Java 泛型运算符 "x.<y>function(...)"叫什么?它有什么作用?

typescript - NestJS 中的 CouchDB

node.js - 错误 : Uncaught (in promise): Error: No provider for GoogleMaps