隐式实现和对象形状
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
,即使指定了类型。