TypeScript Rules
Overview
TypeScript 5.7+ language patterns covering strict mode configuration, type safety, advanced typesystem constructs, best practices, Zod validation, and incremental migration from JavaScript.
Quick Reference
Strict Mode
{
"compilerOptions": {
"strict": true,
"noUncheckedIndexedAccess": true,
"exactOptionalPropertyTypes": true
}
}
Core Rules
- No
any — use unknown, generics, or Record<string, unknown>
- No
enum — union literals (type Status = "active" | "inactive") or as const
- No
! non-null assertions — use guards or Result<T, E>
- No
@ts-ignore — @ts-expect-error only for intentional error tests
import type / export type for type-only imports
- Strict equality
===, const by default
Type System
- Discriminated unions for exhaustive checking
- Generics with constraints (
<T extends { id: string }>)
- Mapped types (
Partial<T>, Immutable<T>, Getters<T>)
- Conditional types (
IsString<T>, ArrayElement<T>, Awaited<T>)
satisfies operator for compile-time validation
- Zod schemas for runtime validation at boundaries
References
- Type Safety — Strict mode, no any, discriminated unions, type guards
- Advanced Types — Generics, mapped types, conditional types, satisfies
- Rules & Anti-Patterns — No enum, import type, Zod, Result pattern, all lint rules (merged)
- Migration Strategy — JS→TS incremental migration, JSDoc, tsconfig
- Code Examples — Repository pattern, DTOs, conditional types, Zod
- Quick Reference — Type system cheat sheet, utility types, keywords
1---2name: 010112-typescript-rules3description: TypeScript strict mode, generics, mapped types, conditional types, Zod validation, migration strategy, and anti-patterns.4license: MIT5---67# TypeScript Rules89## Overview1011TypeScript 5.7+ language patterns covering strict mode configuration, type safety, advanced typesystem constructs, best practices, Zod validation, and incremental migration from JavaScript.1213## Quick Reference1415### Strict Mode16```json17{18 "compilerOptions": {19 "strict": true,20 "noUncheckedIndexedAccess": true,21 "exactOptionalPropertyTypes": true22 }23}24```2526### Core Rules27- No `any` — use `unknown`, generics, or `Record<string, unknown>`28- No `enum` — union literals (`type Status = "active" | "inactive"`) or `as const`29- No `!` non-null assertions — use guards or `Result<T, E>`30- No `@ts-ignore` — `@ts-expect-error` only for intentional error tests31- `import type` / `export type` for type-only imports32- Strict equality `===`, `const` by default3334### Type System35- Discriminated unions for exhaustive checking36- Generics with constraints (`<T extends { id: string }>`)37- Mapped types (`Partial<T>`, `Immutable<T>`, `Getters<T>`)38- Conditional types (`IsString<T>`, `ArrayElement<T>`, `Awaited<T>`)39- `satisfies` operator for compile-time validation40- Zod schemas for runtime validation at boundaries4142## References4344- [Type Safety](references/type-safety.md) — Strict mode, no any, discriminated unions, type guards45- [Advanced Types](references/advanced-types.md) — Generics, mapped types, conditional types, satisfies46- [Rules & Anti-Patterns](references/rules-anti-patterns.md) — No enum, import type, Zod, Result pattern, all lint rules (merged)47- [Migration Strategy](references/migration-strategy.md) — JS→TS incremental migration, JSDoc, tsconfig48- [Code Examples](references/code-examples.md) — Repository pattern, DTOs, conditional types, Zod49- [Quick Reference](references/quick-reference.md) — Type system cheat sheet, utility types, keywords