TypeScript 有七種原始資料型別(primitive):
- null
- undefined
- boolean
- string
- number
- bigint // 0n, 2n, -4n
- symbol // Symbol(), Symbol(“hi”)
註:在 JS 當中,能表示的範圍整數為 Math.pow(-2, 53)+1 到 Math.pow(2, 53) – 1,若超過這個範圍,建議可使用 bigint 型別。
型別系統
型別系統(type system),是一組規則,主要是讓程式理解編譯語言中,可能具有的結構型別。
運作邏輯如下:
- 讀取所寫的程式碼,並分析所有型別和數值。
- 對於每個數值,檢查其初始宣告,有包含哪些型別。
- 對於每個數值,檢查後續的程式碼中,使用它的所有方式。
- 如果數值的用途與其型別不相符,就向開發者報出可能的警告或錯誤訊息。
型別註記
關於 any
宣告一個變數,沒有給它初始值。在預設的情況下,TypeScript 會預設該變數是 any 型別:該型別的意思是可以是任何資料型態都可。
也就是 TypeScript 不會強制執行給它任何特定的型別,而是會在每次指派新資料的時候,對該變數型別做解析。
例:
let rocker; // 型別是 any
rocker = "Carlos"; // 型別會變成是 string
rocker.toUpperCase(); // 可以正常執行該函式
rocker = 19.58; // 型別會變成是 number
rocker.toPrecision(1); // 可以正常執行該函式
rocker.toUpperCase(); // 會報錯,型別 number 沒有 toUpperCase() 函式。
註:儘量不要將變數設定成 any 型別,還為違反了 TypeScript 型別檢查的目的!當 TypeScript 知道資料應該是什麼型別時,效果才是最好的。
型別註記的表示
TypeScript 提供了一種表示方式,無須給它初始值,即可宣告該變數是什麼型別,稱為型別註記(type annotation)。型別註記放在變數名稱之後,包含一個冒號,後面緊接著一個型別名稱。例:
let rocker: string; // 此為型別註記,rocker 變數為 string 型別
rocker = "test name";
註:型別系統中的任何內容程式,都不會被複製到輸出的 JavaScript 中。因此,TypeScript 型別不會影響 JavaScript。
不必要的型別註記
例如以下例子,string 型別註記就是多餘的,因為 TypeScript 已經可以推斷出 firstName 是 string 型別:
let firstName: string = "Mary";
型別樣式
型別也可以是更複雜的樣式,尤其是物件。在以下的例子中,TypeScript 知道 cher 物件沒有 middleName 屬性,所以提出警示:
let cher = {
firstName: "abc",
lastName: "def"
};
cher.middleName; // 型別 '{ firstName: string; lastName: string; }' 沒有屬性 'middleName'。
發佈留言
很抱歉,必須登入網站才能發佈留言。