具有不同通用签名的继承

时间:2016-07-01 09:07:11

标签: javascript typescript

我有问题如何实现具有相同功能的类数组

这是得到的错误

interface I<T> {

}

class A<T> implements I<T> {

    constructor () {

    }
}

class B implements I<number> {
    constructor () {

    }
}

class C<T> implements I<T> {


    private arrr: I<T> [] = [];

    constructor () {
        this.arrr.push(new A<T>());
        this.arrr.push(new B());
    }

}

它在行* Type is not assignable to type I<T>上提供了 this.arrr.push(new B()); 错误*

我该如何解决?我正在使用Typescript 1.8

1 个答案:

答案 0 :(得分:1)

声明特定类型的变量时,只存储该变量中具有该特定类型的那些值。如果声明泛型类型的变量,则只能存储泛型类型的值(非特定类型)。

在您的特定情况下,您声明this.arrr作为泛型类型,并且您存储在其中的值(新B())之一是特定类型。由于这个特定的类型值,它会引发错误。

示例代码

interface I<T> {

}

class A<T> implements I<T> {

    constructor () {

    }
}

class B<T> implements I<T> {
    constructor () {

    }
}

class C<T> implements I<T> {


    private arrr: I<T> [] = [];

    constructor () {
        this.arrr.push(new A<T>());
        this.arrr.push(new B<T>());
    }

}

看看是否有帮助