TypeScript: Qual a diferença entre interface e type? Quando usar cada um?
Olá a todos! Comecei a estudar TypeScript e fiquei confuso com a diferença entre `interface` e `type`. Ambos parecem permitir descrever a estrutura de objetos, mas não entendo quando aplicar cada ferramenta.
Veja meu código. Estou tentando descrever um usuário e seu endereço:
```typescript
// Opção com interface
interface IUser {
name: string;
age: number;
address: IAddress;
}
interface IAddress {
city: string;
street: string;
}
// Opção com type
type TUser = {
name: string;
age: number;
address: TAddress;
}
type TAddress = {
city: string;
street: string;
}
```
Ambas as opções funcionam, mas ouvi dizer que existem diferenças fundamentais. Por exemplo, vi que `type` pode fazer algo com unions, enquanto `interface` não. E em alguns projetos usam `interface` para tudo, enquanto em outros usam `type`.
Por favor, me expliquem qual é a diferença real? Quais são as boas práticas? Existem situações onde só se pode usar um deles?