Skip to content

prefer-immutable-module-constant

Require module-level constant collections to expose readonly state.

Why

A const binding prevents reassignment but does not stop callers from mutating its array, object, Set, or Map contents.

Fix

Expose literals with as const or a readonly type, and expose Set or Map values through ReadonlySet or ReadonlyMap.

Examples

Before — flagged A module constant exposes a mutable array
src/constants.ts
const VALUES = [1, 2, 3];
After — preferred A module constant exposes a readonly literal
src/constants.ts
const VALUES = [1, 2, 3] as const;
Before — flagged A type named Readonly still exposes mutable properties
src/constants.ts
type Readonly = { voice: boolean };
export const TOOL_SUPPORT: Readonly = { voice: true };
After — preferred A local alias resolves to readonly properties
src/constants.ts
type ToolSupport = Readonly<{ voice: boolean }>;
export const TOOL_SUPPORT: ToolSupport = { voice: true };