Sobrecarga de Firmas en Typescript
En TypeScript, podemos especificar una función que se puede llamar de diferentes maneras escribiendo firmas de sobrecarga. Puedes usar esto para definir funciones con un tipo de retorno que depende de los valores de los argumentos.
Daniel Gustaw
• 2 min read
Cuando tienes una función que devuelve diferentes tipos en función de los valores de los parámetros, las firmas de sobrecarga
pueden ser exactamente lo que necesitas.
Déjame introducir el contexto.
Tenemos una función súper simple que calcula el volumen de un hipercubo:
interface HyperCube {
size: number
dimension: number
}
export function volume(cube: HyperCube): number {
return Math.pow(cube.size, cube.dimension);
}
Pero debido a que nuestros volúmenes son realmente grandes, necesitamos mostrarlos en notación de snake case. Ej.: 1_000_000_000
en lugar de 1000000000
.
Podemos agregar una función para formatear.
export function formatNumber(num: number): string {
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1_')
}
pero no queremos escribir esta función formatNumber
siempre que usamos la conversión a cadena. En su lugar, nos gustaría agregar un segundo parámetro a la función volume
para decidir si devolvemos una cadena o un número.
export function volume(cube: HyperCube, asString: boolean = false): string | number {
const volume = Math.pow(cube.size, cube.dimension);
return asString ? formatNumber(volume) : volume;
}
Desafortunadamente, ahora al usar la función volume
no sabemos si obtendremos un string
o un number
. No queremos usar .toString
o parseInt
en ningún momento.
Afortunadamente, existe un concepto llamado firmas de sobrecarga. Permite seleccionar un tipo de retorno en dependencia de los valores de los parámetros.
En nuestro caso queremos que number
sea asString
es falso, en otro caso necesitamos devolver string
. Para aplicar la firma de sobrecarga, podemos usar la siguiente sintaxis
export function volume(cube: HyperCube, asString: false): number
export function volume(cube: HyperCube, asString: true): string
export function volume(cube: HyperCube, asString: boolean = false): string | number {
const volume = Math.pow(cube.size, cube.dimension);
return asString ? formatNumber(volume) : volume;
}
ahora nuestro tipo de retorno es correcto y depende del valor de asString
.
Fuentes:
Tipo de retorno de la función TypeScript basado en el parámetro de entrada
Other articles
You can find interesting also.
La Ley de Benford para la Secuencia de Fibonacci en Java, Rust y Node JS
Los programas escritos en Java, Rust y Node JS compiten en comprobar la distribución de los primeros dígitos de la secuencia de Fibonacci. Vea cómo son similares, en qué se diferencian y cómo su rendimiento depende de la longitud de la secuencia.
Daniel Gustaw
• 19 min read
Máxima Desigualdad [Búsqueda Lineal] rust y typescript
Tarea simple de hackeartch resuelta en node js y rust. Puedes comparar estos dos lenguajes con el ejemplo de este problema. Recomiendo resolverlo de forma independiente antes de leer las soluciones.
Daniel Gustaw
• 7 min read
Raspado del Registro de Farmacias
A los administradores de datos no les gusta. Vea cómo, ingresando dos comandos en la consola, descargó el registro de todas las farmacias en Polonia.
Daniel Gustaw
• 7 min read