| name | typescript-style |
| description | Apply TypeScript style rules that prefer checked literal typing with satisfies and as const satisfies over unsafe assertions. Use when writing or reviewing TypeScript or TSX code, test fixtures, typed object literals, mocks, config objects, or table-driven cases. |
TypeScript Style
Prefer satisfies Over as
Avoid as type assertions and especially as any. Use satisfies when checking object literals, mocks, config objects, fixture data, and expected rows.
Bad:
const config = { port: 3000, host: 'localhost' } as ServerConfig;
const ctx = { fetchDirent: vi.fn(), addReadHistory: vi.fn() } as any;
Good:
const config = { port: 3000, host: 'localhost' } satisfies ServerConfig;
const ctx = { fetchDirent: vi.fn(), addReadHistory: vi.fn() } satisfies MockContext;
Use as const satisfies
Use as const satisfies for static literal data when preserving exact literal values or readonly tuples helps TypeScript catch mistakes.
Good:
const ROUTES = {
home: '/',
about: '/about',
} as const satisfies Record<string, string>;
Good for table-driven cases:
const reportCases = [
{ type: 'daily', period: '2026-05-16' },
{ type: 'monthly', period: '2026-05' },
] as const satisfies readonly ReportCase[];
Acceptable as
Use as only when satisfies cannot express the operation, such as narrowing data returned from an external untyped boundary or adapting to an API that requires a nominal type. Keep it local and avoid as any.
Prefer @ts-expect-error
Use @ts-expect-error instead of @ts-ignore, and include a short explanation. @ts-expect-error fails when the underlying type error disappears, so stale suppressions are caught.
Bad:
import privateApi from 'some-package/private-api';
Good:
import privateApi from 'some-package/private-api';