Extender métodos nativos en TypeScript con la palabra reservada extends te permite ampliar funcionalidades propias del lenguaje, como length, para obtener información extra sin perder la lógica original. Esta técnica es útil cuando necesitas que una función trabaje con tipos genéricos y devuelva datos enriquecidos. Está pensada para quienes ya manejan clases y genéricos en TypeScript.
Qué significa extender un método nativo en TypeScript
Cuando hablamos de extender, no nos referimos solo a heredar entre clases propias. También puedes apoyarte en extends dentro de funciones genéricas para que un método tuyo aproveche propiedades que ya existen en tipos del lenguaje, como length en cadenas o arreglos.
¿Qué hace extends en una función genérica? Restringe el tipo genérico para que solo acepte valores que cumplan una forma específica, por ejemplo, tener la propiedad length. Así garantizas que tu función pueda acceder a esa propiedad sin errores.
El ejemplo arranca creando una carpeta extends y un archivo main.ts dentro del repositorio del curso [00:32]. Ahí declaras una variable de tipo cadena y usas console.log(nombre.length) para confirmar que el lenguaje ya te entrega la longitud por defecto [01:10].
Cómo compilar y ejecutar el archivo TypeScript
Para validar el comportamiento, te mueves a la terminal, entras al folder extends y ejecutas la compilación seguida de la ejecución con Node.
tsc main.ts para compilar el archivo y generar main.js.
node main.js para ejecutar el archivo compilado.
- Repites el flujo cada vez que cambies el código fuente.
El primer resultado entrega 4 para una cadena corta y 29 cuando la cadena cambia a Espinosa de los Monteros [02:30]. Hasta aquí, todo lo hace el método nativo length.
Cómo crear una función obtenerLongitud con genéricos
La idea es construir una función llamada obtenerLongitud que reciba un valor genérico y devuelva su longitud. El truco está en restringir ese genérico para que solo acepte tipos con la propiedad length, lo cual se logra con extends aplicado al parámetro de tipo [03:25].
En una primera versión, la función simplemente retorna obj.length. Si la pruebas con la cadena "hola", el resultado es idéntico al de .length nativo: devuelve 4. Lo mismo pasa con un arreglo numérico de cinco elementos, donde obtienes 5 [04:50].
¿Por qué usar genéricos al extender métodos? Los genéricos permiten que la misma función acepte cadenas, arreglos u otros tipos compatibles, sin duplicar código. Con extends defines la condición mínima que debe cumplir cada valor recibido.
Cómo agregar valor real a la función extendida
Replicar length no aporta nada nuevo. Lo interesante aparece cuando aprovechas la función para sumar información extra. Dentro de obtenerLongitud se declaran dos variables:
let longitud: number = obj.length para almacenar el tamaño del dato recibido.
let tipo: string = typeof obj para extraer el tipo del valor.
- Un
console.log que combina ambos en un mensaje legible.
Al ejecutar la función con la cadena, el output indica que el tipo es string y la longitud es 4. Con el arreglo, el tipo es object y la longitud es 5 [06:40]. Esa es la ganancia: acceder a metadatos que length por sí solo no entrega.
Qué pasa si el tipo no tiene la propiedad length
Los métodos extendidos dependen de propiedades que el valor recibido sí posea. Si intentas pasar 42, un número puro, TypeScript marca error porque ese tipo no tiene length [08:15].
VS Code muestra tres señales del problema antes incluso de compilar:
- Un subrayado en la línea exacta donde se invoca la función con el valor inválido.
- El archivo aparece en rojo en el explorador.
- El minimapa lateral resalta el renglón problemático.
Si ignoras las advertencias y corres tsc, el compilador devuelve el mismo error: el argumento de tipo numérico no cumple con la restricción de tener length. La solución es comentar esa línea o filtrar los tipos aceptados desde la firma genérica.
Cuándo conviene extender métodos nativos
No se trata de envolver cada función del lenguaje. Hazlo solo cuando necesites información adicional o lógica repetida que el método original no entrega.
Algunos escenarios donde aporta valor:
- Mostrar tipo y tamaño de un dato en logs de depuración.
- Validar entradas antes de procesarlas.
- Estandarizar respuestas que combinan datos nativos con metadatos propios.
La pregunta clave antes de extender es para qué lo necesitas. Si la respuesta no agrega información útil, basta con el método nativo.
¿Has extendido alguna función del lenguaje en tus proyectos? Cuéntanos en los comentarios qué propiedad agregaste y por qué te resultó útil.