Definição de array com múltiplos tipos em TypeScript: union types vs tuplas
Olá a todos! Recentemente comecei a estudar TypeScript e me deparei com um problema ao declarar um array que pode conter elementos de diferentes tipos.
Tenho uma função que recebe um array de strings e números. Por exemplo, quero armazenar o ID (número) e o nome (string) de um usuário em um mesmo array. Foi assim que tentei fazer:
```typescript
let users = [1, "Alice", 2, "Bob"];
```
TypeScript infere automaticamente o tipo `(string | number)[]`, o que parece funcionar. Mas depois precisei controlar rigorosamente a ordem: primeiro número, depois string. Tentei assim:
```typescript
let user: [number, string] = [1, "Alice"];
```
Aqui está tudo bem. Mas o que fazer se eu quiser um array dessas tuplas? Escrevi:
```typescript
let users: [number, string][] = [[1, "Alice"], [2, "Bob"]];
```
Mas depois surgiu outra tarefa: o array pode conter OU strings, OU números, mas não ambos no mesmo elemento. Por exemplo, uma lista de tags: `["typescript", 42, "javascript", 100]`.
Pergunta: como