Typescript: La palabra clave extends

- 2 min read

La palabra clave extends

Typescript es un lenguaje completo (un lenguaje completo de Turing); por lo tanto, tiene algunas palabras clave con las que trabajar. Una de ellas es extends.

Esta palabra clave puede ser muy confusa ya que engloba un par de conceptos o significados que dependen del contexto en el que se utilice.

Herencia con extends

La herencia en Typescript se refiere a permitir crear nuevas interfaces que heredan o extienden el comportamiento de una anterior.

sponsor

El contenido de este sitio es y será siempre gratuito para todos. Ayudame a mantenerlo así convirtiendote en auspiciador.
Matias Hernández Logo

Tu producto o servicio podría estar aquí

typescript
					
						
interface User {
  firstName: string;
  lastName: string;
  email: string;
}

interface StaffUser extends User {
  roles: Array<Role>
}

					
				

Lo que se puede ver en el fragmento anterior es:

  • La interfaz User describe un tipo con algunas propiedades que representan a un usuario.
  • La interfaz StaffUser representa a un usuario con las mismas propiedades que User pero además una más: roles.
  • Este uso de extends se puede utilizar para heredar de múltiples interfaces simultáneamente con sólo utilizar nombres separados por comas de las interfaces base.
typescript
					
						
interface StaffUser extends User, RoleUser {

}
					
				

extends como restricción.

También se puede utilizar extends para restringir el tipo o limitar el ámbito de un tipo.

typescript
					
						
export type QueryFunction<
  T = unknown,
  TQueryKey extends QueryKey = QueryKey,
> = (context: QueryFunctionContext<TQueryKey>) => T | Promise<T>
					
				

El ejemplo anterior (de una implementación real de tanstack-query) muestra un tipo llamado QueryFunction. Este es un tipo genérico que acepta dos valores: T y TQueryKey.

Lo que importa aquí es observar el uso de la palabra clave extends: TQueryKey extends QueryKey = QueryKey. Esto se puede leer como TQueryKey y debe ser de tipo Query con un valor por defecto de QueryKey.

El uso anterior de extends acotando o restringiendo el genérico es la piedra angular para poder implementar tipos condicionales ya que los extends se utilizarán como condición para comprobar si un genérico está fuera de un tipo determinado.

😃 Thanks for reading!

Did you like the content? Found more content like this by joining to the Newsletter or following me on Twitter

⚙️ Edit this on github