TypeScript 基礎:基本型別
6 min read

基礎型別
我們都知道 TypeScript 是 JavaScript 的超集,所以在介紹 TypeScript 的型別之前,我們先介紹一下 JavaScript 原本就有的型別。
JavaScript 有的型別
string: 表示字串let myName: string = 'Johnson Mao' // 也可以寫成這樣,TypeScript 會自動推斷 myName2 是字串型別 const myName2 = 'Johnson Mao' // 這時塞數字就會報錯 myName = 404number: 表示數字,包含整數、浮點數、無限大 Infinity、無限小 -Infinity、非數字 NaNconst year: number = 2024 const infinity: number = Infinityboolean: 只會有 true 和 false 兩個值let isCompleted: boolean = false isCompleted = truenull: 表示空值const emptyValue: null = nullundefined: JavaScript 特有的型別,用來表示還沒有賦值的變數const notAssigned: undefined = undefinedsymbol: ES2015 新出的型別,可以用來建創唯一識別符的值const uniqueKey: symbol = Symbol('key')bigint: ES2020 新出的型別,主要用來處理大數字// 需要把 tsconfig.json 的 "target" 設定 "es2020" 才有支援 const bigNumber: bigint = 66666666666666666666nobject: 除了原始型別外,都是物件型別,包含但不限於 Array, Function, Date, Error 等,後續在詳細介紹
TypeScript 擴充的型別
TypeScript 除了有以上的型別外,還擴充了以下這些型別:
any: 表示任意型別。使用 any 可以跳過型別檢查,允許變數是任意型別的值,但會失去型別檢查的保護,因此也有人戲稱 AnyScript,盡量別使用let price: any = 1000 price = '$1,000'unknown: 與 any 類似,但更安全。使用 unknown 型別時,必須先進行型別檢查後才能對其進行操作,否則會報錯,通常用於你不確定這個值的型別const something: unknown = 1000 // 需要型別檢查才能用那個型別的方法 if (typeof something === 'string') { console.log(something.toUpperCase()) }never: 表示永遠不會有值的型別。常見於不會正常結束的函式function throwError(message: string): never { throw new Error(message) }void: 表示沒有任何值的型別,通常用於不返回值的函式,讓後續使用這個函式的人,不要去使用這個函式的返回值做邏輯判斷。function logMessage(message: string): void { console.log(message) } // 跟返回 undefined 相比更嚴謹,例如: const result = logMessage('test') if (result) {} // 報錯:無法對 'void' 類型的運算式測試真實性tuple: 元組型別,表示一個已知數量和型別的元素數組。let tuple: [string, number] tuple = ['one', 2]enum: 枚舉型別,用來定義一組命名常數,這些常數可以是數字或字串。enum 讓程式碼更具可讀性和可維護性enum Gender { Man, Woman, Other, } const myGender: Gender = Gender.Man
TypeScript 自定義型別的方式
就跟 JavaScript 可以宣告變數,為了方便複用型別,TypeScript 也有關鍵字是用來宣告型別,至於更進階的用法,我們後續揭曉,先知道這個方式可以定義自己要使用的型別
type: 允許我們為一組型別賦予別名type Name = string const myName: Name = 'Johnson Mao'interface: 用來定義物件的結構interface IPerson { name: string age: number } const person: IPerson = { name: 'Johnson Mao', age: 18, }
參考文獻
這個大大真的寫得超詳細,推薦去看看
Related Posts
TypeScript 後記
終於完成連續三十天的鐵人賽文章撰寫!距離我第一次參加鐵人賽已經三年之久了。這次參加主要是因為朋友邀請一起參賽,同時我自己也想藉此機會深入了解 TypeScript 5 的新功能,強迫自己透過寫作來吸收知識。
約 5 分鐘
TypeScript 實戰:製作 npm Package
在開發專案時,經常會遇到跨專案共用邏輯或工具的情況,例如常用的 logger 或驗證工具。如果每次都從一個專案複製貼上到另一個專案,難免會出現版本不同步或維護困難的問題。為了解決這類問題,我們可以將這些共用邏輯獨立成為 npm 套件,以便在多個專案中重複使用。
約 7 分鐘
TypeScript 實戰:前端表單與串接 API
在現代前端開發中,與後端進行資料交換是常見的需求。透過 HTTP 請求,我們可以將資料送出並取得結果。這篇文章將介紹如何使用 TypeScript 實作前端表單與串接 API,並展示如何將這些功能結合到 React 應用中。同時,文章還會介紹如何解決跨域問題(CORS),以便讓前後端能順利溝通。
約 6 分鐘
Johnson Mao
A passionate software engineer and blogger sharing thoughts on technology, AI, and development.