Le dichiarazioni interface
e type
sembrano fare la stessa cosa. Quando usi l'uno sull'altro?Quando si utilizza un'interfaccia su un alias di tipo nel flusso?
type Fooable = {
foo(): string
}
vs
interface Fooable {
foo(): string
}
Le dichiarazioni interface
e type
sembrano fare la stessa cosa. Quando usi l'uno sull'altro?Quando si utilizza un'interfaccia su un alias di tipo nel flusso?
type Fooable = {
foo(): string
}
vs
interface Fooable {
foo(): string
}
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:
Spero che questo aiuti!
bella risposta, grazie! – vitorbal
Puoi approfondire questo argomento: 'Questo consente ai sottotipi di essere covarianti w.r.t. methods'? – CMCDragonkai