# 基本類型 >Editor: Jung ## 型別註記與型別推論 :::info - **型別註記(主動)** - 型別註記是TS非常重要的一個特點 - 通過型別註記可以指定TS中變數(參數、形參)的型別 - 指定型別後,當為變數賦值時,TS編譯器會自動檢查值是否符合型別註記,符合則賦值,否則報錯 - 簡而言之,型別註記給變數設置了型別,使得變數只能存儲某種型別的值 - 語法: - ```typescript let 變數: 型別; let 變數: 型別 = 值; function fn(參數: 型別, 參數: 型別): 型別{ ... } ``` - **型別推論(自動)** - TS擁有自動的型別判斷機制 - 當對變數的聲明和賦值是同時進行的,TS編譯器會自動判斷變數的型別 - 所以如果你的變數的聲明和賦值時同時進行的,可以省略掉型別註記 - **型別斷言** - 有些情況下,變數的型別對於我們來說是很明確,但是TS編譯器卻並不清楚,此時,可以通過型別斷言來告訴編譯器變數的型別,斷言有兩種形式: - 第一種 - ```typescript let someValue: unknown = "this is a string"; let strLength: number = (someValue as string).length; ``` - 第二種 - ```typescript let someValue: unknown = "this is a string"; let strLength: number = (<string>someValue).length; ``` ::: ## 型別 :::info - 型別: | 型別 | 例子 | 描述 | | :-----: | :---------------: | :----------------------------: | | number | 1, -33, 2.5 | 任意數字 | | string | 'hi', "hi", `hi` | 任意字串 | | boolean | true、false | 布林值true或false | | 明文型別 | 其本身 | 限制變數的值就是該明文型別的值 | | any | * | 任意型別 | | unknown | * | 型別安全的any | | void | 空值(undefined) | 沒有值(或undefined) | | never | 沒有值 | 不能是任何值 | | object | {name:'Jung'} | 任意的JS Objet | | array | [1,2,3] | 任意JS 陣列 | | tuple | [4,5] | 元素,TS新增型別,固定長度陣列 | | enum | enum{A, B} | 枚舉,TS中新增型別 | ::: - number - ```typescript let decimal: number = 6; let hex: number = 0xf00d; let binary: number = 0b1010; let octal: number = 0o744; let big: bigint = 100n; ``` - boolean - ```typescript let isDone: boolean = false; ``` - string - ```typescript let color: string = "blue"; color = 'red'; let fullName: string = `Bob Bobbington`; let age: number = 37; let sentence: string = `Hello, my name is ${fullName}. I'll be ${age + 1} years old next month.`; ``` - 明文型別 - 也可以使用明文去指定變數的型別,通過明文可以確定變數的取值範圍 - ```typescript let color: 'red' | 'blue' | 'black'; let num: 1 | 2 | 3 | 4 | 5; ``` - any - ```typescript let d: any = 4; d = 'hello'; d = true; ``` - unknown - ```typescript let notSure: unknown = 4; notSure = 'hello'; ``` - void - ```typescript let unusable: void = undefined; ``` - never - ```typescript function error(message: string): never { throw new Error(message); } ``` - object(沒啥用) - ```typescript let obj: object = {}; ``` - array - ```typescript let list: number[] = [1, 2, 3]; let list: Array<number> = [1, 2, 3]; ``` - tuple - ```typescript let x: [string, number]; x = ["hello", 10]; ``` - enum - ```typescript enum Color { Red, Green, Blue, } let c: Color = Color.Green; enum Color { Red = 1, Green, Blue, } let c: Color = Color.Green; enum Color { Red = 1, Green = 2, Blue = 4, } let c: Color = Color.Green; ``` ###### tags: `TypeScript`