TypeScript - 型別推論:初學者指南

你好呀,未來的編程超級明星!今天,我們將踏上一段令人興奮的旅程,進入 TypeScript 的世界,並探索其最酷的功能之一:型別推論。別擔心你對編程還是新手;我將成為你的友好導遊,我們會一步步來。在這個教學結束時,你將會對 TypeScript 的智能程度感到驚奇!

TypeScript - Type Inference

什麼是型別推論?

在我們深入之前,讓我們先來了解型別推論是什麼意思。想像你有一個神奇的朋友,他只需看著你就能猜出你在想什麼。TypeScript 對你的代碼做的就是這樣的事情。它觀察你的代碼,並試圖找出你的變量應該是什麼類型,而不需要你明確告訴它。酷吧?

現在,讓我們探討 TypeScript 如何運用其神奇的推論能力!

變量或成員初始化

基础

當你創建一個變量並立即給它一個值時,TypeScript 可以推断出該變量應該是什麼類型。讓我們看一些例子:

let myName = "Alice";
let myAge = 25;
let isStudent = true;

在這段代碼中,TypeScript 推斷出:

  • myName 是一個 string
  • myAge 是一個 number
  • isStudent 是一個 boolean

你不需要寫 let myName: string = "Alice"; 因為 TypeScript 足夠聰明,能夠推断出來!

更複雜的例子

TypeScript 也可以處理更複雜的類型:

let myFavoriteNumbers = [1, 2, 3, 4, 5];
let myPet = { name: "Fluffy", type: "Cat", age: 3 };

在這裡,TypeScript 推斷出:

  • myFavoriteNumbers 是一個數字數組 (number[])
  • myPet 是一個具有特定屬性的對象(TypeScript 創建了我們所謂的 "對象字面量類型")

函數默認參數

TypeScript 也可以從函數的默認參數中推断類型。讓我們看一個例子:

function greet(name = "Guest") {
console.log(`Hello, ${name}!`);
}

在這個函數中,TypeScript 推斷出 name 是一個 string,因為默認值是一個字符串。

你可以用不同的方式調用這個函數:

greet(); // 輸出:Hello, Guest!
greet("Alice"); // 輸出:Hello, Alice!

函數返回類型

TypeScript 也足夠聰明,能夠根据函數返回的內容推断函數的返回類型。讓我們看一些例子:

function add(a: number, b: number) {
return a + b;
}

function isEven(num: number) {
return num % 2 === 0;
}

TypeScript 推斷出:

  • add 返回一個 number
  • isEven 返回一個 boolean

你不需要寫 function add(a: number, b: number): number,因為 TypeScript 會推断出來!

最通用類型:聯合類型

有時候,TypeScript 需要从多個表達式中推断類型。在這些情況下,它使用我們所謂的 "最通用類型" 算法。讓我們看一個例子:

let mixedArray = [1, "two", 3, "four", 5];

在這裡,TypeScript 推斷出 mixedArray 的類型是 (string | number)[]。這意味著它是一個可以包含字符串和數字的數組。

語境類型

語境類型是當 TypeScript 使用代碼的語境来推断類型時發生的。這在處理回調和函數參數時特別有用。讓我們看一個例子:

let numbers = [1, 2, 3, 4, 5];

numbers.forEach(function(num) {
console.log(num.toFixed(2));
});

在這個例子中,TypeScript 知道在數字數組上使用 forEach 將會把一個數字傳遞給回調函數。所以它推断 num 是一個數字,這就是為什麼你可以在不發生任何錯誤的情況下使用 toFixed()

結論

好了,各位!我們已經穿越了 TypeScript 的神奇型別推論世界。從簡單的變量賦值到複雜的函數返回類型和語境類型,TypeScript 總是努力理解你的代碼,並讓你的生活更輕鬆。

記住,型別推論就像有一個智能助手,幫助你寫出更乾淨、更少錯誤的代碼。它並不完美,有时你可能需要給它一點幫助,使用顯式的類型注釋,但大多數時候,它都會支持你!

持續練習,持續編程,很快你將會成為 TypeScript 的巫師!祝編程愉快,願型別永遠站在你一邊!

方法 描述
變量初始化 TypeScript 从變量的初始值中推断類型
成員初始化 對象屬性的類型從其初始值中推断
函數默認參數 帶有默認值的函數參數的類型被推断
函數返回類型 函數的返回類型根据返回語句推断
最通用類型 TypeScript 找到描述所有選項的最具體類型
語境類型 根據表達式使用的語境来推断類型

Credits: Image by storyset