老师您看我这样理解对吗?
在 TypeScript 中,所谓Duck Typing,就是指:无论一个对象是通过new关键字new出来的,还是通过字面量直接定义的,只要这个对象的结构符合某个接口的要求,就被TypeScript认为是同一种类型
interface Bird {
fly(): void;
sing(): void;
}
class Sparrow implements Bird {
fly(): void {
console.log("Sparrow flying");
}
sing(): void {
console.log("Sparrow singing");
}
}
const sparrow = new Sparrow();
const duck = {
fly(): void {
console.log("Duck flying");
},
sing(): void {
console.log("Duck singing");
},
};
function makeBirdFly(bird: Bird) {
bird.fly();
}
makeBirdFly(sparrow);
makeBirdFly(duck);
上述的sparrow对象和duck对象分别是通过new和字面量创建的,但是因为都符合接口Bird的要求,所以被TypeScript认为是同一种类型,所以都可以被当作参数传入makeBirdFly函数(makeBirdFly的参数类型要求是Bird)