Quais são as diferenças entre o seguinte?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
javascript
typescript
Martiansnoop
fonte
fonte
Respostas:
As interfaces podem ser estendidas
e também aumentado
Aliases de tipo, no entanto, podem representar algumas coisas que as interfaces não podem
Portanto, em geral, se você tiver apenas um tipo de objeto simples, conforme mostrado em sua pergunta, uma interface geralmente é uma abordagem melhor. Se você deseja escrever algo que não pode ser escrito como uma interface, ou deseja apenas dar um nome diferente a algo, um alias de tipo é melhor.
fonte
Type aliases, however, can represent some things interfaces can't
Parece-me seus exemplosNeatAndCool
eJustSomeOtherName
podem ser criados como interfaces que estendem os existentesNeat
,Cool
ouSomeType
tipos.interface NeatAndCool extends Neat, Cool {}
interface JustSomeOtherName extends SomeType {}
Além disso, uma interface pode ser implementada .
fonte
class Thing implements Neat, Cool
Tipos é mais ou menos como Interfaces e vice-versa: ambos podem ser implementados por uma classe. mas existem algumas diferenças importantes: 1. quando Type é implementado por uma classe, as propriedades que pertencem ao Type devem ser inicializadas dentro da classe, enquanto com Interface elas devem ser declaradas. 2. como @ryan mencionou: A interface pode estender outra interface. Tipos não podem.
fonte
As diferenças entre estes também já estão neste tópico.
Aqui
type Foo
einterface Foo
parece quase semelhante, por isso é confuso.interface
É um contrato que as seguintes propriedades (aquifoo:string
) devem estar lá em um objeto.interface
não éclass
. É usado quando o idioma não oferece suporte à herança múltipla. Portanto,interface
pode haver uma estrutura comum entre diferentes classes.Mas
type
einterface
são usados em contextos muito diferentes.Aqui
type
defoo
éFoo
etoday
éDate
. É como uma eliminação de variável que contém a informação do tipo de outra variável.type
é como um superconjunto de interfaces, classes, assinatura de função, outros tipos ou mesmo valores (comotype mood = 'Good' | 'Bad'
). No finaltype
descreve a possível estrutura ou valor de uma variável.fonte
É errado dizer "As interfaces podem ser implementadas", pois os tipos também podem ser implementados
Embora você possa fazer isso, você não pode implementar um tipo que seja uma união de tipos, o que faz totalmente sentido, honestamente :)
fonte
type no typescript é usado para fazer referência a tipos já existentes . Não pode ser estendido como
interface
. Exemplos detype
são:você pode usar os tipos Rest e Spread:
A interface, por outro lado, permite que você crie um NOVO TIPO.
fonte