使用ConstructorParameters扩展泛型类?
假设我有以下泛型类,它有两个字段:一个是字符串,另一个是完全任意的泛型——无论我希望它在实例化时是什么:
class Parent<T> {
stringField: String
genericField: T;
constructor(stringField: String, genericField: T) {
this.stringField = stringField;
this.genericField = genericField;
}
}
实例化它按预期工作,例如new Parent("hello", "world").genericField为字符串new Parent("hello", 10000).genericField提供智能感知,为数字提供智能感知等。
现在假设我想扩展Parent. 这个新的子类的构造应在不存在一个附加参数Parent的构造函数,除了双方的价值观stringField和genericField。
但是,我不想只是复制粘贴Parent参数,因为如果我需要更改Parent. 因此,我想使用ConstructorParameters实用程序类型来推断这些冗余参数并super自动将它们传递给调用,类似于:
class Child<G> extends Parent<G> {
numberField: Number;
constructor(numberField: Number, ...params:ConstructorParameters<typeof Parent>) {
super(...params);
this.numberField = numberField;
}
}
但是,这不会按预期工作。于上述呼叫super中的Child类生成以下编译器错误:Argument of type 'unknown' is not assignable to parameter of type 'G'. 'G' could be instantiated with an arbitrary type which could be unrelated to 'unknown'.
事实上,写作new Child(22, "hello", "world").genericField并没有为字符串提供智能感知,就像这里genericField的类型一样unknown,当我希望它是我传递给它的任何类型时,就像我实例化Parent.