loading...
Cover image for Typescript Shapes

Typescript Shapes

edisonsanchez profile image Edison Sanchez ・2 min read

Si no has visto el post anterior sobre que es Typescript, Interfaces, Clases y Types, te recomiendo que vayas en el siguiente Link para que puedas entender algunos conceptos antes de este nuevo Post.

En Typescript hay un concepto denominado Shapes el cual es poco conocido inclusive por quienes trabajamos con Typescript todos los días en diferentes lenguajes. Esta validación de Typescript se podría resumir como que cada objeto tiene una forma descrita por la clase que lo construyo; y esta forma permite hacer validaciones entre diferentes objetos mediante el cual se puede saber si es de la misma Shape.

Veamos un caso con Vehículos, en el que los vehículos que tienen un Shape definido por la clase Vehiculos (con 5 atributos con sus tipo, y métodos los cuales dan el Shape para el objeto creado como un vehículo objeto en particular.

class VehiculoTS {
  private marca: string;
  private modelo: string;
  private tipo: string;

  constructor(marca: string, modelo: string, tipo: string) {
    this.marca = marca;
    this.modelo = modelo;
    this.tipo = tipo;
  }
}

Después extendemos la clase vehiculo, y ahora tenemos una clase extendida denominada Jeep. Los objetos construidos con la clase Jeep tendrán el Shape de la clase extendida Jeep.

class Jeep extends VehiculoTS {
  private color: string;

  constructor( marca: string, modelo: string, tipo: string, color: string){
    super(marca, modelo, tipo);
    this.color = color;
  }
}

Para comparar shape empleamos el condicional "=", un solo símbolo de igual; esto compara las formas. Para el ejemplo instanciamos dos objetos; el primer objeto será creado con la clase Vehiculo, y el segundo será creado con la clase Jeep.

let Tucson : VehiculoTS = new VehiculoTS ( 'Hyundai', 'Tucson', 'Jeep' );
let TucsonAzul : Jeep = new Jeep ( 'Hyundai', 'Tucson', 'Jeep', 'Azul');

Si me pregunto o le pregunto a Typescript si un objeto creado con la clase Jeep tiene la Shape de un Vehículo (Objeto creado con la clase Vehiculo). Si lo llevamos al mundo real, todos los Jeeps no importando la marca, color, etc; son Vehiculos.

Tucson = TucsonAzul
TucsonAzul = Tucson

Ahora si me preguntara lo contrario: Todos los vehículos tienen la forma de un Jeep? La respuesta inmediata seria un NO; porque? por qué los aviones, motos, submarinos son vehículos pero no tienen la Shape (Forma) de un Jeep.
Alt Text
Por tanto Typescript hace esta validación y me arroja un error que me permite identificar que hay una validación errada y que los Shapes son diferentes.

Posted on by:

edisonsanchez profile

Edison Sanchez

@edisonsanchez

Programming... React, React Native, JScript, AWS Serverless, Postgresql, Angular, IONIC, Python, and counting...

Discussion

markdown guide