Verwendung von Typparametern in Einschränkungen von Generics in TypeScript
TypeScript bietet auch die Möglichkeit, einen Typparameter zu deklarieren, der durch einen anderen Typparameter eingeschränkt wird. Dies ist notwendig, wenn Eigenschaften von einem Objekt in ein anderes kopiert werden müssen, während gleichzeitig sichergestellt wird, dass wir keine überflüssigen Eigenschaften übergeben.
Betrachten wir das folgende Beispiel. Kehren wir
zur Funktion myFunc zurück, die die
Länge einer Variable bestimmt:
function myFunc <T> (data: T): T {
console.log(data.length); // Fehler
return data;
}
Nun möchten wir jedoch, dass diese Funktion
nur mit Typen arbeitet, die eine Eigenschaft
length besitzen. Dazu erstellen wir ein
Interface ILength, dem wir die
Eigenschaft length vom Typ Zahl zuweisen:
interface ILength {
length: number;
}
Als setzen wir in unserer Funktion einen generischen
Typ fest, der von ILength
über das Schlüsselwort extends erbt:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
So sieht unser vollständiger Code aus:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Lassen Sie uns die Funktionsweise unserer Funktion überprüfen und die Länge eines Strings ermitteln:
console.log(myFunc('abcde'));
Ergebnis des ausgeführten Codes:
5
'abcde'
Und nun übergeben wir ein Array als Parameter:
console.log(myFunc(['a', 'b', 'c']));
Ergebnis des ausgeführten Codes:
3
[ 'a', 'b', 'c' ]