Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// Normalmente um array contém de zero à muitos objetos de
// um mesmo tipo. O TypeScript possui uma análise especial
// sobre arrays que contêm múltiplos tipos, e quando a ordem
// em que eles estão indexados é importante.

// Esses são chamados de tuplas. Pense nelas como uma forma para
// conectar dados, mas com menos sintaxe que os objetos.

// Você pode criar uma tupla usando a sintaxe de um array do JavaScript:

const ResponseFalha = ["Não Encontrado", 404];

// mas você precisa declarar o seu tipo como uma tupla.

const ResponseExitosa: [string, number] = ["{}", 200];

// Se você passar o mouse sobre o nome das duas variáveis
// você pode ver a diferença entre um array ( (string | number)[] )
// e uma tupla ( [string, number] ).

// Em um array a ordem não é importante, então um item em
// qualquer posição poderia ser tanto uma string quanto um
// número. Em uma tupla, a ordem e o comprimento são garantidos.

if (ResponseExitosa[1] === 200) {
const InformacaoLocal = JSON.parse(ResponseExitosa[0]);
console.log(InformacaoLocal);
}

// Isso significa que o TypeScript irá prover a tipagem
// correta na posição certa, e até lançar um erro se você
// tentar acessar um objeto em uma posição não declarada.

ResponseExitosa[2];

// Uma tupla pode ser um bom padrão para pequenos pedaços
// de dados conectados ou para fixtures.

type ContaDeFuncionario = [number, string, string, string?];

const funcionarios: ContaDeFuncionario[] = [
[0, "Adankwo", "adankwo.e@"],
[1, "Kanokwan", "kanokwan.s@"],
[2, "Aneurin", "aneurin.s@", "Supervisor"],
];

// Quando você tem um conjunto de tipos conhecidos no começo
// de uma tupla e então várias posições com tipos desconhecidos,
// você pode usar o spread operator para indicar que ela pode
// ter qualquer comprimento e as posições adicionais serão de algum
// tipo específico.

type ComprovantesDePagamento = [ContaDeFuncionario, ...number[]];

const comprovantesDePagamento: ComprovantesDePagamento[] = [
[funcionarios[0], 250],
[funcionarios[1], 250, 260],
[funcionarios[0], 300, 300, 300],
];

const pagamentosDoMesUm = comprovantesDePagamento[0][1] + comprovantesDePagamento[1][1] + comprovantesDePagamento[2][1];
const pagamentosDoMesDois = comprovantesDePagamento[1][2] + comprovantesDePagamento[2][2];
const pagamentosDoMesTres = comprovantesDePagamento[2][2];

// Você pode usar tuplas para descrever funções
// que recebem uma quantidade indefinida de parâmetros tipados:

declare function calcularPagamentoParaEmpregado(id: number, ...args: [...number[]]): number;

calcularPagamentoParaEmpregado(funcionarios[0][0], comprovantesDePagamento[0][1]);
calcularPagamentoParaEmpregado(funcionarios[1][0], comprovantesDePagamento[1][1], comprovantesDePagamento[1][2]);

//
// https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-0.html#tuples-in-rest-parameters-and-spread-expressions
// https://auth0.com/blog/typescript-3-exploring-tuples-the-unknown-type/