¿Cuáles son las diferencias entre los siguientes?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
javascript
typescript
Martiansnoop
fuente
fuente
Respuestas:
Las interfaces se pueden ampliar
y tambien aumentado
Los alias de tipo, sin embargo, pueden representar algunas cosas que las interfaces no pueden
Entonces, en general, si solo tiene un tipo de objeto simple, como se muestra en su pregunta, una interfaz suele ser un mejor enfoque. Si desea escribir algo que no se puede escribir como interfaz, o simplemente quiere darle un nombre diferente a algo, un alias de tipo es mejor.
fuente
Type aliases, however, can represent some things interfaces can't
Me parece que sus ejemplosNeatAndCool
yJustSomeOtherName
se pueden crear como interfaz que amplíe el existenteNeat
,Cool
oSomeType
tipos.interface NeatAndCool extends Neat, Cool {}
interface JustSomeOtherName extends SomeType {}
Además, se puede implementar una interfaz .
fuente
class Thing implements Neat, Cool
Tipos es algo así como Interfaces y viceversa: ambos pueden implementarse mediante una clase. pero hay algunas diferencias importantes: 1. cuando Type es implementado por una clase, las propiedades que pertenecen al Type deben ser inicializadas dentro de la clase, mientras que con Interface deben ser declaradas. 2. como mencionó @ryan: la interfaz puede extender otra interfaz. Los tipos no pueden.
fuente
Las diferencias entre estos también están ya en este hilo.
Aquí
type Foo
yinterface Foo
parece casi similar por lo que es confuso.interface
Es contrato que las siguientes propiedades (aquífoo:string
) deben estar allí en un objeto.interface
no lo esclass
. Se utiliza cuando el idioma no admite herencia múltiple. Entoncesinterface
puede ser una estructura común entre diferentes clases.Pero
type
yinterface
se utilizan en contextos muy diferentes.Aquí
type
defoo
esFoo
ytoday
esDate
. Es como una declinación variable que contiene la información del tipo de otra variable.type
es como un superconjunto de interfaces, clases, firmas de funciones, otros tipos o incluso valores (comotype mood = 'Good' | 'Bad'
). Al final setype
describe la posible estructura o valor de una variable.fuente
Es incorrecto decir "Se pueden implementar interfaces", ya que también se pueden implementar tipos
Aunque puede hacer esto, no puede implementar un tipo que sea una Unión de tipos, lo cual tiene mucho sentido honestamente :)
fuente
type en el mecanografiado se utiliza para hacer referencia a tipos ya existentes . No se puede extender como
interface
. Ejemplos detype
son:puede usar Rest y Spread en tipos:
La interfaz, por otro lado, le permite crear un NUEVO TIPO.
fuente