Using Arrays
Working with Arrays
Para trabalharmos com arrays é simples, basta especificarmos o array type depois do nome:
Definimos o array type
number[]com o nome do tipo e colchetes []
Performing Operations on Typed Arrays
Using inferred typing for arrays
Mesmo não definindo o type o TS consegue inferir de que tipo é aquele valor
Avoiding problems with inferred array types
O compilador infere o array type usando o valor usado para popular o array quando ele é criado
Isso pode causar erros se os valores usados para popular um array, assim pode gerar erros acidentalmente de mixed types. Como no exemplo abaixo:
Logo temos este erro:
error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'
Avoiding problems with empty arrays
Uma outra questão para usar type annotations para arrays é que o compilador vai inferir o tipo para arrays que são criados vazios:
Como é inicializado vazio o compilador infere que é um array de any:
No arquivo de declaration teremos isso:
declare let prices: any[];
Understanding the never array type pitfall
No TypeScript, quando você cria um array vazio ([]), o compilador tenta inferir o tipo dos elementos que poderão ser adicionados.
Se strictNullChecks está desativado, o compilador assume que null e undefined podem ser atribuídos a outros tipos. Nesse caso, um array vazio pode ser inferido como algo mais flexível, como any[].
Se strictNullChecks está ativado, o compilador não permite que null e undefined sejam usados livremente. Isso muda a inferência: um array vazio passa a ser inferido como never[].
O que significa never[]
O tipo never indica que nenhum valor válido pode existir.
Portanto, um array inferido como never[] não aceita nenhum elemento.
Se você tentar adicionar algo, o compilador gera erro, como no exemplo:
Por que isso acontece
O compilador não tem pistas sobre o tipo dos elementos do array vazio.
Com strictNullChecks: true, ele não pode assumir any ou tipos permissivos.
Então, para garantir segurança, ele usa never, forçando você a declarar explicitamente o tipo ou inicializar o array com valores.
Como resolver
Declarar o tipo do array:
Inicializar com valores: