小编use*_*737的帖子

使用 ConstructorParameters 扩展泛型类?

假设我有以下泛型类,它有两个字段:一个是字符串,另一个是完全任意的泛型——无论我希望它在实例化时是什么:

class Parent<T> {
    stringField: String
    genericField: T;

    constructor(stringField: String, genericField: T) {
        this.stringField = stringField;
        this.genericField = genericField;
    }
}
Run Code Online (Sandbox Code Playgroud)

实例化它按预期工作,例如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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这不会按预期工作。于上述呼叫super中的Child类生成以下编译器错误:Argument of type 'unknown' is not assignable …

generics intellisense typescript

8
推荐指数
2
解决办法
262
查看次数

标签 统计

generics ×1

intellisense ×1

typescript ×1