我对 TS 3.0 中新的可提取参数列表感到非常兴奋,作为了解它如何工作的一种方式,我想创建一个工厂。
我有这个工作:
class MyClass{
constructor(paramOne: string, paramTwo: number, paramThree?: boolean) {
}
}
class Factory<T extends new (...args: any[]) => any>{
constructor(private constr: T) { }
create(...params: T extends new (...args: infer P) => infer R ? P : never): T extends new (...args: infer P) => infer R ? R : never{
return new this.constr(...params);
}
}
const myFactory = new Factory(MyClass);
const instance = myFactory.create("hello", 55);
这很酷,但是 create() 函数的定义有点长并且包含一定数量的重复。我试图简化这一点:
create: T extends new (...args: infer P) => infer R ? (...args: P) => R : never = (...params: P) => {
return new this.constr(...params);
}
正如您在操场上看到的那样,这有错误:
类型 '(...params: any) => any' 不能分配给类型 'T extends new (...args: infer P) => infer R ?(...args: P) => R : 从不'。
和
rest 参数必须是数组类型。
有没有办法让这个更短、更简单的声明工作?