javascript - tablas - ¿Cuándo utiliza una interfaz sobre un alias de tipo en flujo?
recorrer tabla javascript (1)
La interface
y las declaraciones de type
parecen hacer lo mismo. ¿Cuándo usas uno sobre el otro?
type Fooable = {
foo(): string
}
vs
interface Fooable {
foo(): string
}
Esta es una gran pregunta. Lo ideal sería que no hubiera diferencia entre una interfaz y un tipo de objeto. Según lo implementado, hay un puñado de diferencias (a menudo sutiles) entre ellas.
La mayor diferencia es que Flow considera que los métodos declarados en una interfaz son de "solo lectura". Esto permite que los subtipos sean métodos de escritura covariantes, que es un patrón muy común con jerarquías de herencia.
Con el tiempo, me gustaría ver que Flow unifica estos conceptos, pero hasta entonces aquí está mi regla de oro para elegir entre interfaces y tipos de objetos:
- Use tipos de objetos para describir bolsas de la mayoría de los datos que se transmiten en su aplicación, por ejemplo, propiedades / estado para los componentes React, acciones Flux / Redux, cosas similares a JSON.
- Use interfaces para describir interfaces tipo servicio. Por lo general, estos son en su mayoría métodos, por ejemplo, Rx.Observable / Observer, Flux / Redux stores, interfaces abstractas. Si es probable que una instancia de clase sea un habitante de su tipo, es probable que desee una interfaz.
¡Espero que esto ayude!