O que são interfaces e como elas funcionam?

Em uma lição anterior, você aprendeu a trabalhar com aliases de tipo e viu exemplos de como nomear tipos de objeto. Como você deve se lembrar, uma forma de nomear um tipo de objeto seria usar a palavra-chave type assim:
type ID = number | string;

type User = {
  id: ID;
  name: string;
};
Outra forma de nomear um tipo de objeto seria usar uma declaração interface assim:
type ID = number | string;

interface User {
  id: ID;
  name: string;
}
type e interface são semelhantes, mas uma diferença importante é que interfaces usam a palavra-chave extends para estender outras interfaces ou tipos, enquanto aliases type usam tipos de interseção (&) para combinar tipos. Vamos ver alguns exemplos:
interface User {
  id: number | string;
  name: string;
}

interface Admin extends User {
  role: string;
}

const adminUser: Admin = {
  id: 101,
  name: "Alice",
  role: "superadmin"
};
Neste exemplo, User começa com id e name. A interface Admin estende User, o que significa que inclui id e name e adiciona uma nova propriedade chamada role. Se você quiser estender um type, usaria um tipo de interseção (&) assim:
type User = {
  id: number | string;
  name: string;
};

type Admin = User & {
  role: string;
};

const adminUser: Admin = {
  id: 101,
  name: "Alice",
  role: "superadmin"
};
Admin combina o tipo User com um novo tipo de objeto que inclui role. O resultado tem a mesma forma do exemplo da interface, que é um objeto com id, name e role. Tanto type quanto interface podem descrever a forma de um objeto. Se você não souber qual usar, lembre-se que interface é especificamente projetado para formas de objeto, enquanto type é mais flexível e também pode representar tipos união, primitivos e combinações de tipos mais complexas.
Este módulo não possui perguntas. Marque como concluído.