2016-04-28 9 views

risposta

30

Questa è una grande domanda. Idealmente non ci sarebbe alcuna differenza tra un'interfaccia e un tipo di oggetto. Come implementato, ci sono una manciata di differenze (spesso sottili) tra di loro.

La più grande differenza è che Flow considera i metodi dichiarati su un'interfaccia come "di sola lettura". Questo permette ai sottotipi di essere covarianti metodi, che è uno schema molto comune con gerarchie di ereditarietà.

Con il tempo, mi piacerebbe vedere flusso unificare questi concetti, ma fino ad allora ecco la mia regola empirica per la scelta tra le interfacce ei tipi di oggetti:

  • tipi di uso di oggetti per descrivere sacchi di gran parte dei dati che sono passato in giro nella tua app, ad esempio, props/state per i componenti React, azioni Flux/Redux, roba simile a JSON.
  • Utilizzare le interfacce per descrivere interfacce tipo servizio. Di solito questi sono per lo più metodi, ad esempio, Rx.Observable/Observer, Flux/Redux, interfacce astratte. Se un'istanza di classe è probabile che sia un abitante del tuo tipo, probabilmente vorresti un'interfaccia.

Spero che questo aiuti!

+0

bella risposta, grazie! – vitorbal

+0

Puoi approfondire questo argomento: 'Questo consente ai sottotipi di essere covarianti w.r.t. methods'? – CMCDragonkai