typescript / intermediate
Snippet
Typ-Ebene Unit-Tests mit bedingten Typ-Zusicherungen
Bedingte generische Funktionen prüfen die exakte Typ-Gleichheit während der Kompilierung. Der Versuch, eine false-Auswertung an AssertTrue zu weisen, erzeugt einen Build-Fehler bei Abweichung der Typdefinitionen.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
type Equals<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2)? true: false;type AssertTrue<T extends true> = T;type User = { readonly id: number; name: string };type MutableUser = { id: number; name: string };type TestReadonlyCheck = AssertTrue<Equals<User, MutableUser>>;
Erklärung
1
type Equals<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2)
Nutzt die Zuweisungskompatibilität generischer Funktionen zur exakten Typ-Gleichheitsprüfung.
2
type AssertTrue<T extends true> = T;
Erzwingt zur Kompilierzeit, dass ein Typ-Parameter strikt zu true auflöst.
3
type TestReadonlyCheck = AssertTrue<Equals<User, MutableUser>>;
Löst einen Kompilierungsfehler aus, falls zwei Typen in Test-Suiten nicht identisch sind.