使用介面強制執行型別

Typescript 的核心優勢之一是它可以強制執行你傳遞程式碼的值的資料型別,以幫助防止出錯。

假設你正在製作寵物約會應用程式。

你有這個簡單的功能,檢查兩隻寵物是否相互相容……

checkCompatible(petOne, petTwo) {
  if (petOne.species === petTwo.species &&
      Math.abs(petOne.age - petTwo.age) <= 5) {
    return true;
  }
}

這是完全功能性的程式碼,但對於某人,特別是那些沒有編寫此功能的應用程式的人來說,他們應該不知道他們應該通過物種年齡來傳遞物件,這太容易了。屬性。他們可能會錯誤地嘗試 checkCompatible(petOne.species, petTwo.species) 然後留下來找出函式試圖訪問 petOne.species.species 或 petOne.species.age 時丟擲的錯誤!

我們可以防止這種情況發生的一種方法是在 pet 引數上指定我們想要的屬性:

checkCompatible(petOne: {species: string, age: number}, petTwo: {species: string, age: number}) {
    //...
} 

在這種情況下,Typescript 將確保傳遞給函式的所有內容都具有種類年齡屬性(如果它們具有其他屬性,則可以),但這是一個笨拙的解決方案,即使只指定了兩個屬性。有了介面,有更好的方法!

首先我們定義我們的介面:

interface Pet {
  species: string;
  age: number;
  //We can add more properties if we choose.
}

現在我們所要做的就是將引數的型別指定為我們的新介面,就像這樣……

checkCompatible(petOne: Pet, petTwo: Pet) {
  //...
}

…和 Typescript 將確保傳遞給我們函式的引數包含 Pet 介面中指定的屬性!