Qual é a diferença entre essas instruções (interface x tipo)?
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
typescript
wonea
fonte
fonte
Respostas:
Conforme a especificação da linguagem TypeScript :
A especificação continua a mencionar:
fonte
interface Point { x: number; } interface Point { y: number; }
extends or implements
não é mais o caso. O tipo pode ser estendido e implementado por aclass
. Aqui está um exemplo typescriptlang.org/play/…Atualização de 2019
As respostas atuais e a documentação oficial estão desatualizadas. E para os iniciantes no TypeScript, a terminologia usada não é clara sem exemplos. Abaixo está uma lista de diferenças atualizadas.
1. Objetos / Funções
Ambos podem ser usados para descrever a forma de um objeto ou uma assinatura de função. Mas a sintaxe é diferente.
Interface
Alias do tipo
2. Outros tipos
Ao contrário de uma interface, o alias de tipo também pode ser usado para outros tipos, como primitivos, uniões e tuplas.
3. Estender
Ambos podem ser estendidos, mas, novamente, a sintaxe é diferente. Além disso, observe que um alias de interface e tipo não é mutuamente exclusivo. Uma interface pode estender um alias de tipo e vice-versa.
Interface estende interface
Alias de tipo estende alias de tipo
A interface estende o alias de tipo
O alias de tipo estende a interface
4. Implementos
Uma classe pode implementar uma interface ou alias de tipo, ambos da mesma maneira exata. Observe, no entanto, que uma classe e uma interface são consideradas projetos estáticos. Portanto, eles não podem implementar / estender um alias de tipo que nomeie um tipo de união.
5. Fusão de declaração
Ao contrário de um alias de tipo, uma interface pode ser definida várias vezes e será tratada como uma única interface (com membros de todas as declarações sendo mescladas).
fonte
type
ouinterface
? Ainda estou confuso sobre quando devo usar um ou outro.A partir do TypeScript 3.2 (novembro de 2018), o seguinte é verdadeiro:
fonte
type
determinadas limitações (e a partir do TypeScript 3.7 essas limitações também desapareceram). As interfaces podem estender tipos. Classes podem implementar tipos. Além disso, a apresentação de dados como captura de tela de uma tabela torna completamente inacessível para pessoas com visão prejudicada.https://www.typescriptlang.org/docs/handbook/advanced-types.html
fonte
Exemplos com tipos:
// cria uma estrutura em árvore para um objeto. Você não pode fazer o mesmo com a interface devido à falta de interseção (&)
// digite para restringir uma variável para atribuir apenas alguns valores. As interfaces não têm união (|)
// graças aos tipos, você pode declarar o tipo NonNullable graças a um mecanismo condicional.
Exemplos com interface:
// você pode usar a interface para OOP e 'implementa' para definir o esqueleto de objeto / classe
// você pode estender interfaces com outras interfaces
fonte
Além das respostas brilhantes já fornecidas, há diferenças visíveis quando se trata de estender tipos versus interfaces. Recentemente, encontrei alguns casos em que uma interface não pode fazer o trabalho:
fonte
a documentação explicou
Interfaces x aliases de tipo
fonte