• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Sobrecarga en TypeScript: Cómo garantizar el tipo correcto al convertir valores

noviembre 29, 2024 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 6 minutos

En TypeScript, los tipos son una parte clave del lenguaje para garantizar la robustez y claridad del código. Siendo la inclusión de tipos estáticos una de las principales características de TypeScript respecto a JavaScript. Por lo que la conversión de tipos es una operación habitual. A menudo, los datos que se manejan en las aplicaciones tienen que transformarse de un tipo a otro para realizar las operaciones adecuadas. Sin embargo, la conversión de tipos puede convertirse en una fuente de errores si no se gestiona de forma adecuada. En esta entrada, se analizará cómo realizar conversiones de tipos utilizando para ello sobrecarga en TypeScript. Viendo en primer lugar un enfoque básico de conversión que puede generar problemas, para, a continuación, utilizar sobrecarga como una solución más robusta.

Tabla de contenidos

  • 1 El problema de las conversiones de tipos
  • 2 Problema: La ambigüedad del tipo de retorno
  • 3 Solución: Uso de sobrecarga para garantizar el tipo
    • 3.1 Implementación de la función con sobrecarga
    • 3.2 Beneficios de la sobrecarga de funciones
    • 3.3 Limitaciones y alternativas
  • 4 Conclusiones

El problema de las conversiones de tipos

Supóngase que se está trabajando en una aplicación en la que es necesario convertir valores de tipo cadena (string) a otros tipos: números (number), valores booleanos (boolean), o simplemente dejarlos como texto (string). Un tipo de conversión que puede ser habitual en muchos escenarios. Por ejemplo, al leer los datos de un formulario.

Para solucionar el problema, se puede escribir una función que acepte como parámetros el valor de la cadena y un argumento donde se especifica el tipo de conversión deseado. A lo que la función devuelve el valor convertido al tipo indicado. La idea es que el código sea flexible, pudiendo manejar múltiples tipos de conversión con una única función.

Faker en Python: qué es, para qué sirve y cómo generar datos sintéticos realistas
En Analytics Lane
Faker en Python: qué es, para qué sirve y cómo generar datos sintéticos realistas

Una primera implementación de esta función de conversión puede ser la que se muestra a continuación:

function convertirValor(valor: string, tipo: 'numero' | 'booleano' | 'texto'): number | boolean | string {
  switch (tipo) {
  case 'numero':
    return parseFloat(valor);
  case 'booleano':
    return valor.toLowerCase() === 'yes';
  case 'texto':
    return valor;
  default:
    throw new Error(`Tipo de conversión no válido: ${tipo}`);
  }
}

En esta función, el valor del parámetro tipo se usa para indicar a qué tipo se desea convertir el valor. Dependiendo del valor de tipo, la función intenta realizar la conversión correspondiente:

  • Si tipo es 'numero', utiliza parseFloat para convertir la cadena en un número.
  • Si tipo es 'booleano', convierte la cadena a un valor booleano (true si es 'yes').
  • Si tipo es 'texto', simplemente devuelve el valor tal cual.

A simple vista todo parece funcionar correctamente. Pero, este enfoque tiene un problema que afecta al código, el valor es ambiguo.

Publicidad


Problema: La ambigüedad del tipo de retorno

El problema con esta implementación es que el tipo de retorno está definido como number | boolean | string. Esto es, en tiempo de compilación TypeScript sabe que la función puede devolver cualquiera de esos tres tipos, pero no sabe con certeza cuál será en cada llamada. Esta falta de precisión en los tipos de retorno puede provocar errores y obliga a los desarrolladores a realizar comprobaciones adicionales antes de usar los valores que devuelve esta función.

Consideremos el siguiente ejemplo:

const resultado = convertirValor('123', 'numero');
console.log(resultado + 10);  // Error: TypeScript no sabe que es un número

A pesar de que resultado es un número, el compilador de TypeScript devuelve el error TS2365: Operator '+' cannot be applied to types 'string | number | boolean' and 'number'. Lo que sucede porque, aunque se ha indicado a la función que convierta el valor a un número ('numero'), TypeScript no puede inferir con seguridad que el valor de retorno es un number. Para TypeScript, resultado también puede ser un boolean o un string, lo que provoca que las operaciones matemáticas como resultado + 10 generen un error.

Esto limita uno de los principales beneficios de usar TypeScript: la garantía de tipos estrictos que ayudan a prevenir errores en el tiempo de ejecución. Si cada vez que se usa esta función es necesario comprobar el tipo de retorno, no se está aprovechando al máximo la potencia del sistema de tipos.

Solución: Uso de sobrecarga para garantizar el tipo

Para solucionar este problema, se puede emplear una técnica avanzada de TypeScript llamada sobrecarga de funciones. La sobrecarga en TypeScript permite definir múltiples firmas para una función, cada una con diferentes parámetros de entrada y tipos de salida, pero con una única implementación subyacente. Permitiendo garantizar que, dependiendo de los argumentos que se le pasen a la función, TypeScript pueda inferir de manera precisa el tipo de valor devuelto.

Para el ejemplo anterior se pueden definir tres firmas para la función: una para cada tipo de conversión.

Publicidad


Implementación de la función con sobrecarga

Para implementar la sobrecarga en TypeScript no se debe tocar la función, solo definir las firmas de convertirValor tal como se muestra a continuación:

// Sobrecargas de la función
function convertirValor(valor: string, tipo: 'numero'): number;
function convertirValor(valor: string, tipo: 'booleano'): boolean;
function convertirValor(valor: string, tipo: 'texto'): string;

// Implementación de la función
function convertirValor(valor: string, tipo: 'numero' | 'booleano' | 'texto'): number | boolean | string {
  switch (tipo) {
  case 'numero':
    return parseFloat(valor);
  case 'booleano':
    return valor.toLowerCase() === 'yes';
  case 'texto':
    return valor;
  default:
    throw new Error(`Tipo de conversión no válido: ${tipo}`);
  }
}

En esta nueva versión, al principio del condigo, se han declarado tres firmas de la función convertirValor:

  • Si el tipo es 'numero', la función devolverá un number.
  • Si el tipo es 'booleano', devolverá un boolean.
  • Si el tipo es 'texto', devolverá un string.

La implementación de la función sigue siendo la misma, pero ahora TypeScript puede inferir correctamente el tipo de retorno en función del argumento tipo.

Beneficios de la sobrecarga de funciones

Con esta nueva implementación, los problemas de ambigüedad en el tipo de retorno desaparecen. Ahora TypeScript puede garantizar que, cuando se solicita convertir el valor a un número, el resultado será un número; cuando se solicita un booleano, será un booleano, y así sucesivamente. El nuevo comportamiento de la función se puede ver claramente en el siguiente código:

const numero = convertirValor('123', 'numero'); // TypeScript sabe que esto es un number
console.log(numero + 10);                       // 133, sin errores

const booleano = convertirValor('yes', 'booleano'); // TypeScript sabe que esto es un boolean
console.log(booleano);                            // true

const texto = convertirValor('Hola', 'texto');    // TypeScript sabe que esto es un string
console.log(texto);                               // "Hola"

En cada uno de estos ejemplos, TypeScript infiere con precisión el tipo del valor devuelto. Ya no es necesario realizar comprobaciones adicionales o conversiones forzadas, lo que simplifica el código y lo hace más seguro.

Publicidad


Limitaciones y alternativas

Si bien la sobrecarga resuelve el problema de tipos en este caso, es importante tener en cuenta algunos puntos adicionales:

  • Mantenimiento: Si en el futuro se desea agregar más tipos de conversión, como por ejemplo a un Date, es necesario actualizar tanto las firmas de la función como su implementación. Esto puede incrementar la complejidad del código.
  • Legibilidad: Aunque la sobrecarga mejora la precisión del código, tener múltiples firmas para una función puede hacer que el código sea más difícil de seguir. En proyectos grandes, es recomendable documentar bien las funciones sobrecargadas para que otros desarrolladores puedan entenderlas fácilmente.

Una alternativa a las sobrecargas es el uso de tipos genéricos, que pueden proporcionar una solución más flexible en algunos casos. Sin embargo, para escenarios simples como el que este, las sobrecarga en TypeScript es una solución clara y directa.

Conclusiones

La conversión de tipos en TypeScript es una tarea clave en muchas aplicaciones. Pero, si no se hace de forma adecuada, puede producir problemas a la hora de trabajar con los datos. Si la conversión se realiza con un enfoque básico suele producir ambigüedad en los tipos de retorno, lo que afecta a la seguridad del código.

El uso de la sobrecarga de funciones permite solucionar este problema, garantizando que el compilador de TypeScript sepa exactamente qué tipo de valor se devolverá en función de los argumentos de entrada. Lo que mejora la claridad, seguridad y eficiencia del código, permitiendo a los desarrolladores trabajar con más confianza y menos errores.

Al implementar sobrecargas en funciones que realizan conversiones de tipos, como convertirValor, se puede garantizar que el sistema de tipos de TypeScript se utilice de manera óptima, proporcionando todos los beneficios de un tipado estático fuerte.

Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicidad


Publicaciones relacionadas

  • Faker en Python: qué es, para qué sirve y cómo generar datos sintéticos realistas
  • Probabilidades y tests: por qué un resultado positivo no significa lo que crees
  • JSON en bases de datos: cuándo es buena idea y cuándo no
  • Roles en ciencia de datos: Guía completa de perfiles técnicos
  • Exactitud, precisión, recall… qué mide realmente cada métrica (y qué no)
  • Hardening de SSH en Rocky Linux 9: cómo desactivar KEX débiles y reforzar la seguridad
  • Nueva herramienta en Analytics Lane: generador de contraseñas seguras y frases de contraseña
  • Hardening de NGINX en 2026: configuración segura básica paso a paso

Publicado en: JavaScript Etiquetado como: TypeScript

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Hardening de NGINX en 2026: configuración segura básica paso a paso

marzo 12, 2026 Por Daniel Rodríguez

Nueva herramienta en Analytics Lane: generador de contraseñas seguras y frases de contraseña

marzo 10, 2026 Por Daniel Rodríguez

Hardening de SSH en Rocky Linux 9: cómo desactivar KEX débiles y reforzar la seguridad

marzo 5, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Diferencias entre CPU, GPU, TPU y NPU publicado el abril 19, 2023 | en Herramientas
  • Histograma generado para el conjunto de datos con la selección automática del número de bins Seleccionar el número de bins en un histograma publicado el mayo 26, 2023 | en Ciencia de datos
  • Poe: ChatGPT y otros modelos generativos en el móvil publicado el abril 12, 2023 | en Herramientas
  • pandas Pandas: Contar los valores nulos en DataFrame publicado el agosto 12, 2021 | en Python
  • Rocketbook: Libretas reutilizables, elegantes y sostenibles publicado el enero 26, 2024 | en Reseñas

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto