我有这样一个简单的类,我试图使用泛型类型(在本例中为Dog)来约束类中对象的类型。我希望在这里看到编译错误box.put(cat),因为我传递了错误的类型但不幸的是,我没有看到任何。
class Box<T>{
content: Array<T> = [];
put(animal: T){
this.content.push(animal);
}
}
var dog = new Dog();
var cat = new Cat();
var box = new Box<Dog>();
box.put(cat);
答案 0 :(得分:4)
Typescript使用结构兼容性来确定类型兼容性。因此,鉴于您的代码,Dog
和Cat
具有这些定义
class Dog{ name: string }
class Cat{ name: string; lives: number }
您的代码将有效,因为Cat
包含Dog
的所有字段,因此兼容。
如果你定义了这样的类:
class Dog{ name: string; isAsGoodBoy: boolean }
class Cat{ name: string; lives: number }
您的代码将不再有效,因为Dog
字段Cat
没有。
如果您熟悉Javascript,那么考虑它的有用方法是结构类型是鸭子类型的编译时版本。