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.
Tutorial para creadores de paquetes ESM + CommonJS
Hay un intenso debate en la comunidad de JS sobre dejar de lado CommonJS o utilizar paquetes duales. He recopilado enlaces clave y escrito un tutorial sobre la publicación de paquetes duales.
Daniel Gustaw
• 7 min read
Calendario estilo Git con fechas personalizadas
calendario estilo git creado a partir de una lista de fechas guardadas como archivo csv
Daniel Gustaw
• 2 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