在 TypeScript 中,你可能遇见过以下这样“看起来不太对,但竟然能正常运行”的代码:
class Cat {
eat() {
}
}
class Dog {
eat() {
}
}
function feedCat(cat: Cat) {
}
feedCat(new Dog())
这是因为,TypeScript 比较两个类型并非通过类型的名称,而是比较这两个类型上实际拥有的属性与方法。也就是说,这里实际上是比较 Cat 类型上的属性是否都存在于 Dog 类型上,在比较对象类型的属性时,