首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau
百百 BLOG
首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau

Kurau Blog

「隨心而寫,真真假假,都是我」

一個記錄生活、輸出興趣的個人空間。
遊戲、影視、閱讀、學習……每一段體驗都值得留下文字。

頁面導覽

  • 學習紀錄
  • 遊戲心得
  • 影視Life
  • 書單
  • 委託作品與二創
  • Kurau
  • 合作邀請

找到我

歡迎來 Discord 找我聊天!

“曾經發生的事不可能忘記,只是暫時想不起來而已。”-《神隱少女》

© 2026 Kurau All rights reserved

面試考題

型別轉換

By Kurau·Updated 2026-05-09·2 分鐘閱讀

在 TypeScript 中,有時候需要將一個值的類型「放寬」,因為該值的實際類型比較複雜,或者 TypeScript 無法很好地推斷它的類型。這時候可以使用 unknown 類型。

舉例來說

在這段程式碼中,newSelectedFiles 是一個 Array,它需要轉換為 FileList。然而,由於 FileList 並不是一個常見的 JavaScript 類型,TypeScript 可能無法確定這樣的轉換是否安全。因此,使用 **as unknown** 可以先將類型轉為 unknown,再轉回 FileList。

newSelectedFiles as unknown as FileList
JavaScript

型別斷言(Type Assertion)的幾種方式

1. as 語法(推薦)

const value: unknown = 'hello';
const strLength: number = (value as string).length;
TypeScript

2. 角括號語法(JSX 中不可用)

const strLength: number = (<string>value).length;
TypeScript

3. 雙重斷言(謹慎使用)

當兩個型別之間沒有直接關係時,需要透過 unknown 中轉:

// 不能直接轉:Type 'string' 不能轉換為 'number'
const x = 'hello' as unknown as number;
TypeScript

型別守衛(Type Guard)- 更安全的做法

// typeof 守衛
function printValue(val: string | number) {
  if (typeof val === 'string') {
    console.log(val.toUpperCase());
  } else {
    console.log(val.toFixed(2));
  }
}

// instanceof 守衛
if (error instanceof Error) {
  console.log(error.message);
}

// in 守衛
if ('name' in obj) {
  console.log(obj.name);
}
TypeScript
盡量使用型別守衛而非型別斷言,因為守衛會在執行時實際檢查型別,更加安全。

目錄

    ◆ 相關文章

    • Async function-Await 函式

      2026-06-02
    • throw Error用法

      2026-06-02
    • TypeScript 特性 - Interface

      2026-06-02
    • TypeScript 資料型別 - 元組(Tuple) & 列舉(Enum)

      2026-06-02
    ← 上一篇四種渲染模式下一篇 →堆疊Stack與佇列Queue

    ◆ 關於作者

    Kurau

    個人寫作 / 創作的 SoT,記錄遊戲、影視、學習與生活。

    更多 Kurau 的文章