隐式实现和对象形状

TypeScript 支持接口,但编译器输出 JavaScript,但没有。因此,在编译步骤中有效地丢失了接口。这就是为什么接口上的类型检查依赖于对象的形状 - 意味着对象是否支持接口上的字段和函数 - 而不是接口是否实际实现。

interface IKickable {
  kick(distance: number): void;
}
class Ball {
  kick(distance: number): void {
    console.log("Kicked", distance, "meters!");
  }
}
let kickable: IKickable = new Ball();
kickable.kick(40);

因此,即使 Ball 没有明确地实现 IKickable,也可以将 Ball 实例分配给(并操作为)IKickable,即使指定了类型。