Die wichtigsten Regeln
strict: true
Aktiviert strictNullChecks, noImplicitAny und mehr. Zusätzlich lohnt sich noUncheckedIndexedAccess.
unknown statt any
Externe Daten (API, JSON) sind unknown, bis sie geprüft sind – z. B. mit Zod oder einem Type Guard.
Union statt Flags
status: 'loading' | 'error' | 'done' statt drei Booleans, die sich widersprechen können.
Kein ! zum Ruhigstellen
Der Non-Null-Operator ! lügt dem Compiler etwas vor. Lieber prüfen oder den Typ korrigieren.
readonly & const
Unveränderliche Daten als readonly bzw. as const markieren – verhindert versehentliche Mutation.
Linter & Formatter
typescript-eslint mit strict-Preset und Prettier in CI und Pre-Commit.
any vs. unknown
Nicht so
const user: any = await res.json();
console.log(user.nmae.toUpperCase()); // Tippfehler, LaufzeitfehlerSo
const data: unknown = await res.json();
const user = UserSchema.parse(data); // Zod prüft zur Laufzeit
console.log(user.name.toUpperCase());Zustände modellieren
Nicht so
interface State {
loading: boolean;
error?: string;
data?: Order[];
}
// loading: true UND error gesetzt?So
type State =
| { status: 'loading' }
| { status: 'error'; error: string }
| { status: 'done'; data: Order[] };