Objetos y arreglos
Los objetos de JavaScript son colecciones de valores
asociados a un nombre (o clave).
// Puedes combinarlos para crear modelos de datos más
grandes y complejos.
const userAccount = {
name: "Kieron",
id: 0,
};
// Si utilizas tu mouse para pasarle por encima a estas
palabras (prueba con purchaseOrder arriba) puedes ver
como TypeScript está interprentando tu JavaScript como
tipos etiquetados.
Los valores pueden accederse con un ".", por lo que
para obtener un nombre de usuario de una orden de compra:
const pie = {
type: "Apple",
};
const purchaseOrder = {
owner: userAccount,
item: pie,
};
// Si pasas tu mouse por encima de cada parte del código entre
los ()s, puedes ver que TypeScript ofrece más información
sobre cada parte. Intenta reescribir esto debajo:
Copia esto en la próxima línea, carácter por carácter:
purchaseOrder.item.type
TypeScript proporciona retroalimentación al playground
sobre qué objetos de JavaScript están disponibles en este
archivo y permite evitar errores tipográficos y ver
información adicional sin tener que buscarla en otro sitio.
TypeScript también ofrece estas mismas funcionalidades para
los arreglos. Aquí hay una arreglo con solo nuestra orden
de compra de arriba en él.
console.log(purchaseOrder.item.type);
// Si pasas por encima de allOrders, puedes saber que es
un arreglo porque la información termina con []. Puedes
acceder a la primera orden usando los corchetes con un
índice (comenzando en cero).
const allOrders = [purchaseOrder];
// Una forma alternativa de obtener un objeto es sacando
(con pop) los elementos del arreglo. Al hacerlo se
elimina el objeto del arreglo y se devuelve el objeto.
A esto se le llama mutar el arreglo, porque cambia los
datos subyacentes dentro de él.
const firstOrder = allOrders[0];
console.log(firstOrder.item.type);
// Ahora allOrders está vacío. Mutar los datos puede ser
útil para muchas cosas, pero una forma de reducir la
complejidad en tus bases de código es evitar la mutación.
TypeScript ofrece por otra parte una forma de declarar
un arreglo de solo lectura (readonly):
Crea un tipo basado en la forma de una orden de compra:
const poppedFirstOrder = allOrders.pop();
// ¡Sí! Es un poco más de código sin dudas. Hay cuatro
nuevas cosas aquí:
type PurchaseOrder - Declara un nuevo tipo de TypeScript.
typeof - Usa el sistema de inferencia de tipos para establecer
el tipo con base en la constante que se pasa a continuación.
purchaseOrder - Obtiene la variable purchaseOrder y le dice
a TypeScript que esta es la forma de todos los
objetos en el arreglo orders.
readonly - Este objeto no permite mutación, una vez que
se crea el contenido del arreglo será siempre
el mismo.
Ahora si intentas hacer pop de readonlyOrders, TypeScript
levantará un error.
type PurchaseOrder = typeof purchaseOrder;
// Crea un arreglo de solo lectura de órdenes de compra
const readonlyOrders: readonly PurchaseOrder[] = [purchaseOrder];
// Puedes usar readonly en todo tipo de lugares, es un
poco más de sintaxis extra, pero proporciona mucha
seguridad adicional.
Puedes saber más sobre readonly:
- https://www.typescriptlang.org/docs/handbook/interfaces.html#readonly-properties
- https://basarat.gitbooks.io/typescript/content/docs/types/readonly.html
y puedes continuar aprendiendo sobre JavaScript y
TypeScript en el ejemplo sobre funciones:
example:functions
O si quieres saber más sobre inmutabilidad:
example:immutability
readonlyOrders.pop();