跳至主要内容

any 跟 unknown

什麼是 any 型別?

  • 關閉型別檢查
  • 可以被賦任何值,任何操作都不會報錯
let count: any = 3;
count = "5";
count.toFixed();

在編譯的時候不會報錯 (不檢查) ,直到瀏覽器運行的時候才會

什麼是 unknown 型別?

  • 安全版的 any
  • 可以賦值,但不能直接使用(讀屬性、呼叫、運算)

使用方式 1:型別檢查 (推薦)

const price: unknown = 1458694;
// price.toFixed(); 會報錯

if (typeof price === "number") {
price.toFixed(); // 檢查型別之後就可以使用
}

使用方式 2:型別斷言 (as)

const price: unknown = 1458694;
// 使用斷言告訴 TypeScript 你確定這個值的型別
const numPrice = price as number;
numPrice.toFixed(); // 可以直接使用

// 或直接在使用時斷言
(price as number).toFixed();

注意:斷言只是告訴 TypeScript 編譯器你確信型別,但不會在運行時檢查。如果型別不正確,運行時仍可能出錯。

實作範例

function parse(json: string): unknown {
return JSON.parse(json); // JSON.parse 回傳型別太寬,先用 unknown 保守處理
}

// 呼叫端:先檢查型別再操作
const data: unknown = parse(raw);
if (typeof data === 'object' && data !== null && 'name' in data) {
// 這裡才能安全地存取
const name = (data as { name: string }).name;
}