typescript / expert
Snippet
Typenbasierte Kovarianz- und Kontravarianz-Überprüfung für Testumgebungen
Fortgeschrittenes Hilfsmittel für Tests auf Typenebene, das Varianzeigenschaften von Funktionssignaturen berechnet. Es prüft kovariante Rückgabetypen und kontravariante Parameterakzeptanz ohne Laufzeit-Overhead.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
type IsSubtype<T, U> = T extends U ? true : false;type CheckCovariance<Fn, Producer> =Fn extends () => infer R ? IsSubtype<R, Producer> : false;type CheckContravariance<Fn, Consumer> =Fn extends (arg: infer A) => void ? IsSubtype<Consumer, A> : false;type CovariantTest = CheckCovariance<() => 'admin', string>;type ContravariantTest = CheckContravariance<(arg: string) => void, 'admin'>;
Erklärung
1
type IsSubtype<T, U> = T extends U ? true : false;
Wertet Untertypenbeziehungen über bedingte generische Typenauflösung aus.
2
Fn extends () => infer R ? IsSubtype<R, Producer> : false;
Extrahiert den Rückgabetyp R zur Kovarianzprüfung gegen den erwarteten Producer-Obertyp.
3
Fn extends (arg: infer A) => void ? IsSubtype<Consumer, A> : false;
Extrahiert den Parametertyp A zur Kontravarianzprüfung durch Testen, ob Consumer A erweitert.