-
简而言之:鸭子类型说明了只要一个对象拥有鸭子类型中的属性,即便这个对象没有赋予类型/赋予了其他类型,我们也可以认为这个对象是属于鸭子类型。
-
好处是:方便,在一些函数的入参限制了传值的类型,只要我们的值满足类型的属性即可传入。
-
坏处是:可能存在意想不到的问题,然而 Typescript 也没报错。我们可能有⼀个
Dog
类型和⼀个Cat
类型,它们都有⼀个bark
⽅法。我们可能会错误地将⼀个Cat
对象传递给⼀个期望Dog
对象的函数,而 typescript 的类型检查器⽆法发现这个错误。
interface Dog {
bark: () => void;
}
function letDogBark(dog: Dog) {
dog.bark();
}
const cat = {
bark: () => console.log('Meow...'), // Cats don't bark!
purr: () => console.log('Purr...')
};
letDogBark(cat); // No error, but it's wrong!