TypeScript - 型別推論:初學者指南
你好呀,未來的編程超級明星!今天,我們將踏上一段令人興奮的旅程,進入 TypeScript 的世界,並探索其最酷的功能之一:型別推論。別擔心你對編程還是新手;我將成為你的友好導遊,我們會一步步來。在這個教學結束時,你將會對 TypeScript 的智能程度感到驚奇!
什麼是型別推論?
在我們深入之前,讓我們先來了解型別推論是什麼意思。想像你有一個神奇的朋友,他只需看著你就能猜出你在想什麼。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