2017-09-06 110 views
0

我有这样一个简单的类,我试图用类属性(在这种情况下,狗)约束我的类内的对象的类型。我期望在这里看到编译错误box.put(猫),因为我通过了错误的类型,但不幸的是,我看不到任何。TypeScript不检测泛型类

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); 

回答

4

Typescript使用结构兼容性来确定类型兼容性。所以给你的代码,如果DogCat这些定义

class Dog{ name: string } 
class Cat{ name: string; lives: number } 

您的代码将工作,因为CatDog所有领域,因此兼容。

如果您定义的类是这样的:

class Dog{ name: string; isAsGoodBoy: boolean } 
class Cat{ name: string; lives: number } 

您的代码将不再起作用,因为Dog有场Cat没有。

如果您熟悉Javascript,可以考虑一下它的一个有用的方法是结构类型是duck typing的编译时版本。

+0

谢谢你这么好的解释。 – zdimon77

+0

@ zdimon77很高兴帮助,不要忘记标记为已回答:) –