# 基本類型
>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`