TypeScript不检测泛型类

时间:2017-09-06 11:21:08

标签: typescript generics

我有这样一个简单的类,我试图使用泛型类型(在本例中为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);

1 个答案:

答案 0 :(得分:4)

Typescript使用结构兼容性来确定类型兼容性。因此,鉴于您的代码,DogCat具有这些定义

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,那么考虑它的有用方法是结构类型是鸭子类型的编译时版本。