Typescript中的鸭子类型

发布时间 2023-12-25 10:21:44作者: 脆皮鸡
  1. 简而言之:鸭子类型说明了只要一个对象拥有鸭子类型中的属性,即便这个对象没有赋予类型/赋予了其他类型,我们也可以认为这个对象是属于鸭子类型。

  2. 好处是:方便,在一些函数的入参限制了传值的类型,只要我们的值满足类型的属性即可传入。

  3. 坏处是:可能存在意想不到的问题,然而 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!