隱式實現和物件形狀

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,即使指定了型別。