TypeScript未检测到泛型类

TypeScript未检测到泛型类,typescript,generics,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

我有这样一个简单的类,我试图使用泛型类型(在本例中是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);
类框{
内容:数组=[];
put(动物:T){
这个。内容。推(动物);
}
}
var dog=新的dog();
var cat=新cat();
var-box=新的box();
盒子。放(猫);

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,一个有用的思考方法是结构化类型是duck类型的编译时版本。

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,一个有用的思考方法是结构化类型是duck类型的编译时版本。

@zdimon77乐于帮助,不要忘记标记为已回答:)@zdimon77乐于帮助,不要忘记标记为已回答:)