Guia para escribir buenas funciones gen茅ricas
Al escribir funciones gen茅ricas es importante no utilizar generics en donde no sean necesarios, debido a que esto puede interferir con el mantener una funci贸n sencilla de utilizar e interpretar.
Favorece la inferencia sobre la declaraci贸n de los tipos de los argumentos
Aqu铆 hay dos funciones que operan igual.
function primerElemento<Type>(arr: Type[]) {
return arr[0];
}
function primerElemento<Type extends any[]>(arr: Type[]) {
return arr[0];
}
Ambas funciones realizan el mismo trabajo y ambas funciones infieren el tipo del return, sin embargo para la primera funci贸n el Type sera el tipo provisto como argumento a la funci贸n mientras que en la segunda el Type es any que es mucho mas generalista.
Utiliza pocos par谩metros
Aqu铆 hay otras dos funciones.
function filtrar1<Type>(arr: Type[], func: (arg: Type) => boolean): Type[] {
return arr.filter(func);
}
function filtrar2<Type, Func extends (arg: Type) => boolean>(
arr: Type[],
func: Func
): Type[] {
return arr.filter(func);
}
En este ejemplo tenemos dos funciones que realizan la misma tarea, pero en el segundo ejemplo Func
no relaciona al menos dos valores, solo hace mas complicado de leer la funci贸n y no existe una raz贸n valida para ello.
El par谩metro Type debe aparecer al menos dos veces
En algunas ocasiones olvidamos que una funci贸n no requiere siempre utilizar generics.
function saludar(Type extends string)(s: Type) {
console.log("Hola " + s);
}
La funci贸n anterior puede ser escrita f谩cilmente en una forma mas simple.
function saludar(s: string) {
console.log("Hola " + s);
}
Intenta recordar siempre que si implementas generics es porque deseas relacionar valores. Si un par谩metro es utilizado solamente en una ocasi贸n, no requiere que eches uso de esta caracter铆stica.