Tipos `unknown` e `any` em TypeScript: qual a diferença e quando usar cada um?
Olá a todos! Recentemente comecei a estudar TypeScript e me deparei com dois tipos que à primeira vista parecem muito semelhantes: `any` e `unknown`. Ambos permitem armazenar valores de qualquer tipo, mas sinto que há alguma diferença importante entre eles que estou perdendo.
Por exemplo, estou escrevendo uma função que recebe dados de uma API. Não sei de antemão o que virá — pode ser um objeto, uma string ou um número. Aqui está como estou fazendo atualmente:
```typescript
function processData(data: any) {
console.log(data.toUpperCase()); // Funciona sem erros, mas pode falhar em runtime
}
```
Mas se eu tentar usar `unknown`, recebo um erro:
```typescript
function processDataSafe(data: unknown) {
console.log(data.toUpperCase()); // Erro: Object is of type 'unknown'
}
```
Por que isso? Ambos os tipos parecem permitir armazenar qualquer coisa, mas `unknown` se comporta de forma mais restritiva. Li que `unknown` é uma alternativa type-safe ao `any`, mas não entendo completamente o que isso significa na prática.