Datos compuestos en TypeScript (III). Objetos

Los objetos en TypeScript son estructuras muy similares a las listas, que establecen la base de la POO. Un objeto es una estructura de datos rígida, es decir, en la que sus datos son inamovibles en cuanto a estructura, aunque no en cuanto a contenido.

No te dejes impresionar por lo de «estructura rígida». Una vez más, tener la posibilidad de establecer los tipos de datos que se van a manejar, es algo positivo para la coherencia programática. Además, cada objeto en sí mismo mantiene siempre los mismos datos (aunque puedan cambiar sus valores), lo que los convierte en artefactos imprescindibles para mantener buenas prácticas de programación.

En este artículo vamos a ver como crear y manipular objetos desde TypeScript, como paso previo al uso de clases, tema que veremos en un artículo posterior.

CREANDO UN OBJETO

Crear un objeto pasa, realmente, por dos fases: definir la estructura del mismo, y poblarlo con datos. Dicho así, esto se parece cada vez más a declarar una clase e instanciarla en objetos, pero no lo es, aún. De momento, aún estamos trabajando sólo con objetos individuales. Vamos por partes. Empecemos declarando un objeto al que llamaremos miVehiculo, en el que pretendemos almacenar ciertas propiedades de un vehículo. La estructura genérica (que podría variar, dependiendo de las propiedades que necesitemos), podría ser algo así:

Esto transpila a JavaScript de una forma bastante decepcionante:

Cómo ves, el resultado es muy pobre, ya que la estructura de datos y sus tipos son características que JavaScript no implementa. Cuando muestras en consola el valor de la variable, tal cómo está actualmente, lo único que obtienes es undefined.

Para que el objeto tenga datos con valores con los que podamos trabajar, debemos asignárselos. Podemos hacer la asignación en la misma sentencia en la que hemos hecho la declaración de la estructura, así:

Esto transpila a un JavaScript que ya tiene algo de «sustancia»:

En la consola del navegador, esta vez, sí obtenemos un resultado relevante:

Observa especialmente la última línea, que nos dice que los datos anteriores son parte de un objeto.

También podemos hacer la asignación de datos en una sentencia aparte de la declaración, así:

Al transpilar veremos que la declaración y la asignación de valores también quedan separadas, y funciona perfectamente, mostrando en la consola del navegador los valores.

MANEJANDO VALORES

Una vez creado un objeto, podemos manejar los valores de sus datos de la forma que nos convenga, ateniéndonos siempre a unas premisas fundamentales:

  • Sólo podemos trabajar con los valores que existen en la declaración del objeto. Esto significa que no podemos sacarnos de la manga propiedades que no hayan sido incluidas en la declaración. En el caso del vehículo que hemos visto, por ejemplo, no podemos crear una propiedad que sea, digamos, el número de asientos, ya que no consta en la declaración de la estructura.
  • Los datos que sí constan, podemos cambiarles el valor, siempre que sean del tipo especificado en la declaración. Así, en el caso anterior, podremos establecer, en la propiedad motor, el valor 1800, pero no "1800 cc", por ejemplo.
  • TypeScript permite que se asignen las propiedades del objeto, o que se reasignen posteriormente, pero todas en conjunto. En seguida comentamos esto.

Si bien estas son limitaciones que JavaScript no impone, TypeScript sí lo hace, y el transpilador nos avisará de los errores en el momento de transpilar.

Si queremos reasignar (modificar) el valor de alguna de las propiedades (o todas) del objeto, no debemos reasignar todo el objeto en su conjunto. sólo con la propiedad que queremos modificar. Observa el siguiente fragmento:

Si lo que queremos es modificar sólo el valor de una propiedad lo haremos empleando la notación clásica objeto.propiedad, así:

Esto sí es perfectamente legítimo en TypeScript, y da una transpilación limpia (sin avisos de errores).

CONCLUYENDO

En este artículo hemos aprendido a crear y manipular objetos en TypeScript. En realidad, más que objetos como tal son simples estructuras de datos, ya que pensamos en el término objeto como una instancia de una clase, y ese es un tema que aún no hemos tratado, y del que empezaremos a hablar en una artículo próximo. Lo que hemos visto aquí está bien como introducción, pero necesitamos «más» y, como veremos, TypeScript nos lo ofrece. De momento, los códigos de este artículo te los puedes descargar en este enlace.

   

Deja un comentario