typescript / expert
Snippet
Explizite In/Out-Varianz-Annotationen für typsichere Subtyp-Kompatibilität
Demonstriert explizite Ko- (out) und Kontravarianz-Annotationen (in) an Typparametern zur Beschleunigung der Typprüfung und Garantie von Subtyp-Zuweisungen.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type Animal = { name: string };type Dog = Animal & { breed: string };interface Container<out T> {get(): T;}interface Writer<in T> {put(item: T): void;}function processProducer(c: Container<Animal>): string {return c.get().name;}const dogContainer: Container<Dog> = { get: () => ({ name: "Rex", breed: "Shepherd" }) };const name = processProducer(dogContainer);
Erklärung
1
interface Container<out T> { get(): T; }
Markiert T als strikt ko-variant (nur Ausgabe), sodass Container<Dog> an Container<Animal> zugewiesen werden kann.
2
interface Writer<in T> { put(item: T): void; }
Markiert T als strikt kontra-variant (nur Eingabe).
3
const name = processProducer(dogContainer);
Übergibt den Subtyp-Container (Dog) sicher an eine Funktion, die Container<Animal> erwartet.