Pet*_*one 5 generics typescript
这是通用工厂官方 Typescript 文档中的示例。在此示例中,构造函数不带参数。
function create<T>(c: {new(): T; }): T {
return new c();
}
Run Code Online (Sandbox Code Playgroud)
我如何重写它,以便除了类型之外,工厂方法还接受其他参数,并在调用它正在实例化的类的构造函数时传递它们?所以返回语句看起来像这样:
return c(p1, p2);
Run Code Online (Sandbox Code Playgroud)
我不清楚的是
{new(): T; }
Run Code Online (Sandbox Code Playgroud)
实际上是一个接口,因为它定义了提议类的兼容性评估条款,顺便还声明了构造函数签名。我要回答我自己的问题。
这就是我要做的:
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);
Run Code Online (Sandbox Code Playgroud)
如果您的构造函数需要更多参数,则只需将它们添加到您传递给构造函数的一个对象中,这样您就不需要为每个参数添加更多通用约束。
归档时间: |
|
查看次数: |
4888 次 |
最近记录: |