---
# System prepended metadata

title: Day17 【牙起來】 七種基礎型別(Type) - Typescript

---

# Day17 【牙起來】 七種基礎型別(Type) - Typescript

## 原始型別(primitive)

與`Javascript`一樣
`Typescript`也有七種長老級的 **原始型別(primitive)**

分別為 `bigint`、`boolean`、`null`、`number`、`string`、`symbol`、`undefined`

其他型別都是由這七種衍伸而來

這邊的7種是**排除了 物件`object` 與 函式`function`**
因為這兩類不算在原始型別(primitive)內

> 但在寫程式時，最常用到的就是 `number`、`string`、`boolean` 三種
> 分別為以下例子的`a`、`b`、`c`

### 若要知道型別為何

可以透過 `typeof` 來查出變數的型別

### 寫在外面 - 變數(Variable)

```typescript=
let a = 0;
let b = '';
let c = false;
let d = {};
let e = [];
let f = () => {};

console.log(typeof a)  // number
console.log(typeof b)  // string  
console.log(typeof c)  // boolean 
console.log(typeof d)  // object  
console.log(typeof e)  // object  
console.log(typeof f)  // function
```


### 寫在物件內部 - 成員

如果寫在物件裡，就會變成**成員(Member)**
需要加 `this` 指定物件本身

```typescript=
export class TestClass {
    a = 0;
    b = '';
    c = false;
    d = {}
    e = []
    f = () => {}

    constructor() {
        console.log(typeof this.a)  // number
        console.log(typeof this.b)  // string
        console.log(typeof this.c)  // boolean
        console.log(typeof this.d)  // object
        console.log(typeof this.e)  // object
        console.log(typeof this.f)  // function
    }
}

let test = new TestClass;
```


## 冒號(colon) 標示型別

冒號(colon) `:` 為 **標示著前面變數的型別**

如果要標示出型別

```typescript=
export class Test {
    a : number = 0;
    b : string = '';
    c : boolean = false;
}
```

> 雖說 `Typescript` 能夠推斷最基本的型別
> 所以可進行標註、也可以不標註
> 
> 會需要標註的原因 主要是**給人看**的
> 讓後序接手維護的人方便了解變數型態
> 
> 所以，除非是一眼就能明白的型別，否則能多標註出物件的型別是好事
