使用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的构造函数,除了双方的价值观stringFieldgenericField

但是,我不想只是复制粘贴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.

以上是使用ConstructorParameters扩展泛型类?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>