Einschränkungen von Generics in TypeScript
In einer der vorherigen Lektionen haben wir eine Funktion generischen Typs erstellt, die die Länge des an sie übergebenen Parameters ausgeben sollte. Bei der Kompilierung erhielten wir jedoch einen Fehler, da nicht alle Typen eine Länge haben können:
function myFunc < T > (data: T): T {
console.log(data.length); // Fehler
return data;
}
In jenem Fall haben wir die Situation behoben, indem wir
den generischen Typ in einen Typ eines generischen Arrays geändert haben.
Aber in TypeScript gibt es eine Möglichkeit,
Einschränkungen für Generics zu erstellen. Dazu schreiben wir in den spitzen
Klammern, nach der Variable T, das
Schlüsselwort extends. Danach
schreiben wir in geschweiften Klammern eine neue
Variable str vom String-Typ.
Der restliche Code der Funktion bleibt unverändert:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Es ergibt sich, dass der generische Typ den Typ
der Variable str erbt, die in den geschweiften
Klammern angegeben ist. Lassen Sie uns nun die Funktionsweise
unserer Funktion überprüfen und eine Variable myStr erstellen,
die auf den Typ str verweist, und weisen ihr
einen Wert in geschweiften Klammern zu:
let myStr: {str: string} = {str: 'abcde'};
Lassen Sie uns die Funktion myFunc aufrufen, ohne
zu vergessen, ihren Typ erneut anzugeben, und übergeben
die Variable myStr als Parameter:
myFunc <{str: string}> (myStr);
Basierend auf dem im Unterricht betrachteten Beispiel definieren Sie eine Funktion zum Ermitteln der Länge eines numerischen Arrays.