TypeScript中类型约束中的泛型出错

时间:2014-03-15 01:40:17

标签: generics typescript

我已经创建了一个简短的示例代码来演示我面临的问题:

class List<T> { }

class StringList extends List<string> { }

class NumberList extends List<number> { }

class Iterator<T extends List<any>> {
    list: T;

    constructor() {
        this.list = new StringList();
    }
}

(on playground)

此代码会生成Cannot convert 'StringList' to 'T'

知道为什么以及如何避免它? 感谢。


修改

以下是一个错误原因的例子(感谢@RyanCavanaugh指出):

var iterator: Iterator<List<any>> = new Iterator<NumberList>();

您希望iterator包含List<number>类型的列表,但是ctor尝试将List<string>分配给它。

1 个答案:

答案 0 :(得分:2)

这是一个错误,因为它错了:

class MagicList extends StringList {
    magic = 'shazam';
}

var x = new Iterator<MagicList>();
console.log(x.list.magic); // x.list does not have member 'magic'

请记住,约束只会在泛型类型上建立 lower 绑定。