Restricciones de genéricos en TypeScript
En una de las lecciones anteriores, creamos una función de tipo genérico que debía mostrar la longitud del parámetro pasado en ella. Sin embargo, durante la compilación nos apareció un error, ya que no todos los tipos pueden tener longitud:
function myFunc < T > (data: T): T {
console.log(data.length); // error
return data;
}
En ese caso, solucionamos la situación cambiando
el tipo genérico por un tipo de array genérico.
Pero en TypeScript existe la posibilidad de crear
restricciones para los genéricos. Para ello, en los
corchetes angulares, después de la variable T escribimos
la palabra clave extends. Después de ella,
entre llaves, anotamos una nueva
variable str de tipo string.
El resto del código de la función permanecerá sin
cambios:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Resulta que el tipo genérico hereda el tipo
de la variable str, especificada entre llaves.
Ahora comprobemos el trabajo
de nuestra función y creemos la variable myStr,
que hace referencia al tipo str, y asignémosle
un valor entre llaves:
let myStr: {str: string} = {str: 'abcde'};
Llamemos a la función myFunc, sin
olvidar especificar nuevamente su tipo y pasemos
la variable myStr como parámetro:
myFunc <{str: string}> (myStr);
Basándose en el ejemplo considerado en la lección, defina la función para encontrar la longitud de un array numérico.