什麼是 as const
前言 在 TypeScript 裡,as const 是一個很常見的語法。 例如: const DIRECTIONS = [ 'north', 'south', 'east', 'west', ] as const; 前面已經用了 const,最後再多加了一個 as const。 原因在於兩者作用於不同層面: const 是 JavaScript 的宣告:它鎖定的是「變數綁定」,確保該變數不能被重新賦值; as const 則是 TypeScript 的型別斷言,影響的是「型別推導」。它會要求 TypeScript 以最精確的方式推導值的型別,保留其字面量型別(Literal Type),並將 object 或 array 視為唯讀(Readonly)。 const 跟 as const 的區別 一個普通的 const: const direction = 'north'; 這裡 TypeScript 可以推斷出 direction 是: "north" 但如果是 array: const directions = ['north', 'south', 'east', 'west']; TypeScript 通常會推斷成: string[] 也就是說,TypeScript 認為這是一個「可以放任何 string 的 array」。 所以這是合法的: directions.push('apple'); 即便我們只想讓這個 array 應該只包含幾個固定選項。 這時候就可以使用 as const: const DIRECTIONS = [ 'north', 'south', 'east', 'west' ] as const; TypeScript 會把它推斷成: ...