Objects and Arrays
Objetos em JavaScript são coleções de valores agrupados
com chaves nomeadas.
//Você pode combiná-las para tornar os modelos de dados maiores
e mais complexos.
const userAccount = {
name: "Kieron",
id: 0,
};
//Se você passar o mouse sobre algumas dessas palavras
(tente purchaseOrder acima) você poderá ver como o
TypeScript interpreta o JavaScript com rótulos de tipagem.
Os valores podem ser acessados por meio de ".", para
obter um nome de usuário para um pedido de compra.
const pie = {
type: "Apple",
};
const purchaseOrder = {
owner: userAccount,
item: pie,
};
//Se você passar o mouse por cima de cada parte do código
entre os ()s, você poderá ver o TypeScript oferecendo mais
informações sobre cada parte. Tente reescrever isso baixo:
Copie isso na próxima linha, caractere por caractere:
purchaseOrder.item.type
TypeScript fornece feedback para o playground
sobre quais objetos do JavaScript estão disponíveis neste
arquivo e permite você evitar erros de digitação e ver
informações adicionais sem precisar procurar em outro local
TypeScript também oferece esses mesmos recursos para arrays.
Aqui temos um array com apenas nossos pedidos de compra acima.
console.log(purchaseOrder.item.type);
//Se você passar o mouse por cima de allOrders, você poderá
afirmar que é um array, porque as informações passadas pelo
cursor terminam com um []. Você pode acessar o primeiro pedido
usando colchetes com um índice (começando do zero).
const allOrders = [purchaseOrder];
//Uma maneira alternativa para obter um objeto é por meio do
uso do método pop() no array para remover objetos. Fazer
isso remove o objeto do array e retorna o objeto.
Isso é chamado de mutação do array, pois alteara os dados
subjacentes de seu interior.
const firstOrder = allOrders[0];
console.log(firstOrder.item.type);
//Agora 'allOrders' está vazio. Dados mutantes podem ser úteis para
muitas coisas, mas uma forma de reduzir a complexidade em seu
código-base é evitar a mutação. Para isso, o TypeScript oferece
uma forma de declarar um array para somente leitura:
Cria uma tipagem baseada no formato de 'purchaseOrder':
const poppedFirstOrder = allOrders.pop();
//Sim! Há um pouco mais de código, com certeza. Existem quatro
coisas novas aqui:
type PurchaseOrder - Declara uma nova tipagem para o TypeScript.
typeof - Usa o sistema de dedução de tipos para definir a tipagem
baseada na 'const' que é passada em seguida.
purchaseOrder - Obtem a variável purchaseOrder e informa ao
TypeScript que este é o formato de todos
os objetos no array de pedidos.
readonly - Este objeto não permite mutação, uma vez criado,
o conteúdo do array sempre permanecerá o mesmo.
Agora, se você tentar utilizar o método pop() do array readonlyOrders,
o TypeScript gerará um erro.
type PurchaseOrder = typeof purchaseOrder;
//Cria um array de readonly (somente-leitura) de pedidos de compra
const readonlyOrders: readonly PurchaseOrder[] = [purchaseOrder];
//Você pode usar o readonly em todos os tipos
de lugares. É um pouco de sintaxe extra aqui e ali,
mas fornece muito mais segurança.
Você pode encontrar mais sobre o readonly aqui:
- https://www.typescriptlang.org/docs/handbook/interfaces.html#readonly-properties
- https://basarat.gitbooks.io/typescript/content/docs/types/readonly.html
E você pode continuar aprendendo sobre JavaScript e TypeScript
no exemplo de funções:
example:functions
Ou se desejar saber mais sobre imutabilidade:
example:immutability
readonlyOrders.pop();