我已经创建了一个简短的示例代码来演示我面临的问题:
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();
}
}
此代码会生成Cannot convert 'StringList' to 'T'
。
知道为什么以及如何避免它? 感谢。
以下是一个错误原因的例子(感谢@RyanCavanaugh指出):
var iterator: Iterator<List<any>> = new Iterator<NumberList>();
您希望iterator
包含List<number>
类型的列表,但是ctor尝试将List<string>
分配给它。
答案 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 绑定。