---
# System prepended metadata

title: '#4 新手指南：型別斷言'
tags: [TypeScript 新手指南]

---

---
tags: TypeScript 新手指南
---

# #4 新手指南：型別斷言

> 討論日期: 2021/11/30
> 討論範圍: 新手指南：型別斷言


## 筆記分享

- https://dazedbear.notion.site/TypeScript-4-2a3f34f3c5f84f258fb12ce901a64c73


## 待解決問題

### 1. 何時會用到 Double Assertion?

https://basarat.gitbook.io/typescript/type-system/type-assertion#double-assertion

```typescript=
// 這兩者完全等價，只有使用偏好的差異 (ex: linter rule、字數多寡)
值 as unknown as 型別
值 as any as 型別
```

```typescript=
// 這樣會報錯
function handler(event: Event) {
    let element = event as HTMLElement; // Error: Neither 'Event' nor type 'HTMLElement' is assignable to the other
}

// 這樣不會報錯，因為 event 先被斷言成 unknown 再被斷言成 HTMLElement，unknown 相容於任何型別
function handler(event: Event) {
    let element = event as unknown as HTMLElement; // OK!
}
```

### 2. 延伸閱讀：Narrowing

https://pjchender.dev/typescript/ts-narrowing/#%E4%BD%BF%E7%94%A8-typeof

> Narrowing 指的是將某一個最初定義可能為多種型別的變數，透過一些 Type Guard 的程式邏輯逐漸限縮成更具體的某單一種型別的過程。

> 作為「當型別為 X 才執行 Y 操作」。

## 線上討論紀錄

- 很快速帶過~