前言
針對TS 來看看TypeScript 的數據類型
typescript
和 javascript
幾乎一樣,擁有相同的數據類型,
另外 typescript
在 javascript
基礎上提供了更加實用的類型供開發使用
在開發階段,可以為明確的變量定義為某種類型,這樣 typescript
就能在編譯階段進行類型檢查,當類型不合符預期結果的時候則會出現錯誤提示
數據類型有哪些
數據類型分成下列幾種
基本類型
類型名稱 | 內容 | 舉個例子 |
---|---|---|
number | 表示數字 | let age: number = 30; |
string | 表示字符串 | let name: string = “John”; |
boolean | 表示布爾值 | let isActive: boolean = true; |
null | 表示空值 | let data: null = null; |
undefined | 表示未定義的值 | let data: undefined = undefined; |
symbol | 表示唯一的符號值 | let id: symbol = Symbol(“id”); |
複合類型
類型名稱 | 內容 | 舉個例子 |
---|---|---|
array | 表示數組 | let numbers: number[] = [1, 2, 3]; |
tuple | 表示具有固定元素數量和類型的數組 | let person: [string, number] = [“John”, 30]; |
object | 表示對象 | let user: { name: string, age: number } = { name: “John”, age: 30 }; |
函數類型
類型名稱 | 內容 | 舉個例子 |
---|---|---|
function | 表示函數類型 | let greet: Function = () => console.log(“Hello!”); |
函數的參數和返回值也可以聲明具體的類型 | 表示具有固定元素數量和類型的數組 | let add: (x: number, y: number) => number = (x, y) => x + y; |
進階類型
類型名稱 | 內容 | 舉個例子 |
---|---|---|
enum | 表示列舉類型 | enum Color { Red, Green, Blue }; let color: Color = Color.Red; |
any | 表示任意類型,可以接受任何數據類型 | let data: any = 10; data = “Hello”; |
unknown | 表示未知類型,類似於 any 但具有類型檢查 | let data: unknown = 10; data = “Hello”; |
void | 表示沒有返回值的類型 | function sayHello(): void { console.log(“Hello!”); } |
以上是
TypeScript
中常見的數據類型
,可以幫助在編寫代碼時明確聲明變量的類型
,從而提供類型檢查和更好的代碼提示。
舉個例子
boolean
布爾類型
1 | let flag:boolean = true; |
number
數字類型,和
javascript
一樣,typescript
的數值類型都是浮點數
,可支持二進制、八進制、十進制和十六進制
1 | let num:number = 123; |
進制表示:
1 | let decLiteral: number = 6; // 十進制 |
string
字符串類型,和JavaScript
一樣,可以使用雙引號(")
或單引號(')
表示字符串
1 | let str:string = 'this is ts'; |
作為超集,當然也可以使用模版字符串``進行包裹,通過${} 嵌入變量
1 | let name: string = `Gene`; |
array
數組類型,跟javascript
一致,通過[]
進行包裹,有兩種寫法:
方式一:元素類型後面接上[]
1 | let arr:string[] = ['12', '23']; |
方式二:使用數組泛型,Array<元素类型>:
1 | let arr:Array<number> = [1, 2]; |
tuple
元祖類型,允許表示一個已知元素數量和類型的數組,各元素的類型不必相同
1 | let tupleArr:[number, string, boolean]; |
賦值的類型、位置、個數需要和定義(生明)的類型、位置、個數一致
enum
enum
類型是對JavaScript
標準數據類型的一個補充,使用列舉類型可以為一組數值賦予友好的名字
1 | enum Color {Red, Green, Blue} |
any
可以指定任何類型
的值,在編程階段還不清楚類型的變量指定一個類型,不希望類型檢查器對這些值進行檢查而是直接讓它們通過編譯階段的檢查,這時候可以使用any類型
使用any
類型允許被賦值為任意類型,甚至可以調用其屬性、方法
1 | let num:any = 123; |
定義存儲各種類型數據的數組時,示例代碼如下:
1 | let arrayList: any[] = [1, false, 'fine']; |
null 和和undefined
在JavaScript
中 null
表示”什麼都沒有”,是一個只有一個值的特殊類型,表示一個空對象引用,
而undefined
表示一個沒有設置值的變量
默認情況下null
和undefined
是所有類型的子類型,
就是說你可以把 null
和 undefined
賦值給 number類型的變量
1 | let num:number | undefined; // 數值類型 或者 undefined |
但是
TypeScript
配置了--strictNullChecks
標記,null
和undefined
只能賦值給void
和它們自己
void
用於標識方法返回值的類型,表示該方法沒有返回值。
1 | function hello(): void { |
never
never
是其他類型(包括null
和undefined
)的子類型,可以賦值給任何類型,代表從不會出現的值
但是沒有類型是never
的子類型,這意味著聲明 never
的變量只能被 never
類型所賦值。
never
類型一般用來指定那些總是會拋出異常、無限循環
1 | let a:never; |
object
對像類型,非原始類型,常見的形式通過{}進行包裹
1 | let obj:object; |
總結
和javascript
基本一致,也分成:
- 基本類型
- 引用類型
在基礎類型上,typescript
增添了void
、any
、emum
等原始類型