Tipo de texto: Interfaces vs tipos
Qual é a diferença entre estas declarações (interface vs tipo)?
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
2 answers
De acordo com a especificação da linguagem de Tipo :
Ao contrário de uma declaração de interface, que sempre introduz um tipo de objeto nomeado, uma declaração de tipo alias pode introduzir um nome para qualquer tipo de tipo, incluindo tipos primitivos, União e interseção.
A especificação continua a mencionar:
Os tipos de Interface têm muitas semelhanças com os nomes alternativos do tipo de objecto literais, mas como os tipos de interface oferecem mais capacidades sao geralmente preferiu escrever pseudónimos. Por exemplo, o tipo de interface
interface Point { x: number; y: number; }
Pode ser escrito como nome alternativo
No entanto, fazê - lo significa que se perdem as seguintes capacidades:type Point = { x: number; y: number; };
- uma interface pode ser nomeada numa cláusula de extensão ou implementa, mas um nome alternativo para um tipo de objeto literal não pode.
- uma interface pode ter várias declarações fundidas, mas um nome alternativo para um tipo de objecto literal não pode.
Https://www.typescriptlang.org/docs/handbook/advanced-types.html
Uma diferença é que as interfaces criam um novo nome que é usado em todo o lado. Digite os nomes alternativos não criam um novo nome - por exemplo, as mensagens de erro não irão usar o nome alternativo.