Sistema estructural de Tipos en TypeScript

Author
Por Darío Rivera
Publicado el en TypeScript

El sistema estructural de tipos en typescript es un concepto bastante interesante pero sencillo de entender. Vamos a ver a detalle qué significa esto en el lenguaje. Para esto, es necesario que tengas algunas bases acerca de alias de tipos e interfaces.

En el siguiente ejemplo vas a observar cómo definimos a Point como un alias de tipo, y lo requerimos como argumento en la función printCoord. Así, typescript se asegurará que el parámetro tenga dos argumentos requeridos, X e Y.

type Point = {
  x: number;
  y: number;
};

function printCoord(pt: Point) {
  console.log("Coordenada en X: " + pt.x);
  console.log("Coordenada en Y: " + pt.y);
}

Hay que tener en cuenta que los alias de tipo no son más que eso, alias. Lo mismo sucede con las interfaces, son en esencia estructuras que definen cómo tiene que ser un objeto. Así que es posible definir o utilizar otro tipo definido de la misma forma y pasarlo al original siempre y cuando tenga los mismos atributos o métodos. Veamos a qué nos referimos. 

type PointInterface {
  x: number;
  y: number;
};

function nothing(pt: PointInterface) {
  return pt;
}

printCoord(nothing({x: 3, y: 4}));

El código anterior utiliza la función nothing para recibir un objeto PointInterface que es pasado a su vez a printCoord como un alias de tipo Point. Esto funciona, ya que la definición del objeto es la misma tanto en la interfaz como en el alias de tipo.

TypeScript tiene un sistema de tipos estructuralmente tipado, esto quiere decir que comprueba la estructura del objeto, no el nombre o identificador asignado al mismo. Es por esta razón que el código anterior es válido. Esto podría dar lugar a pensar entre otras cosas, cuándo utilizar un alias de tipo y cuándo una interfaz. Te recomiendo dar un vistazo a los siguientes dos artículos que tal vez despejarán un poco este panoráma.

- Interfaces en TypeScript
- Alias de tipos en TypeScript


Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.