TypeScript的鸭子类型
根据TypeScript的说法,鸭子类型是一种用于检查更复杂的变量类型的类型兼容性的方法或规则。
TypeScript使用鸭子类型方法通过检查两个对象是否具有相同类型匹配名称来比较一个对象与其他对象。这意味着我们不能更改变量的签名。例如,如果我们分配具有两个属性(如名称、地址)的对象,然后下一次分配包含更多属性或更少属性或两个属性都不是(名称、地址)的对象,则TypeScript编译器将生成编译时错误。这个概念就是鸭子类型。
鸭子类型的功能为TypeScript代码提供了类型安全性。
通过鸭子类型规则,TypeScript编译器检查一个对象是否与另一个对象相同。
根据鸭子类型方法,两个对象必须具有相同的属性/变量类型。
class Dog {
sound = "barking";
}
class Lion {
sound = "roaring";
}
class Goat {
sound = "bleat";
swim(){
console.log("Cannot Swim!");
}
}
let lion: Lion = new Dog(); //代替
let dog: Dog = new Lion(); //代替
let lionTwo: Lion = new Goat();
//let goat: Goat = new Lion(); //IDE和编译器错误
console.log("Lion Sound: "+lion.sound);
console.log("Dog sound: "+dog.sound);
console.log("Lion sound: "+lionTwo.sound);
输出
在上面的例子中,我们可以看到它不允许将狮子替换为山羊,因为山羊类有一个额外的方法(所以狮子无法通过鸭子类型)。Dog和Lion在鸭子类型中是可替代的,因为狮子和狗都能做的事情互相可以替代。