2015-05-02 7 views
26

Il docs dicono:Qual è la differenza tra `mixed` e` any`?

  • mixed: il "supertipo" di tutti i tipi. Qualsiasi tipo può fluire in un mixed.
  • any: il tipo "dinamico". Qualsiasi tipo può fluire in any, e viceversa

Quale potrebbe essere un caso in cui mixed e any non sono intercambiabili?

+0

Il collegamento di questo documento è interrotto e [il documento corrente su 'mista'] (https://flow.org/en/docs/types/mixed/) non ha alcun testo simile. Ecco come appariva la pagina dei documenti quando esisteva: https://web.archive.org/web/20150513033813/http://flowtype.org/docs/base-types.html –

risposta

18

La differenza è il "vice-versa": any può scorrere in altri tipi, ma non è possibile mixed.

/* @flow */ 
var numeric:number = 0; 
var looselyTyped:any; 
var someType:mixed; 

numeric = looselyTyped; 
numeric = someType; //only this will throw a flow check error 

Dalla documentazione si è collegato al:

Vale la pena di chiamare qualsiasi particolare a causa della natura particolare di questa annotazione. Utilizzare any per evitare la tipizzazione statica di Flow. In altre parole, se Flow si sta intromettendo e sei assolutamente convinto che il tuo programma sia di tipo corretto, puoi silenziare gli errori annotando le posizioni lungo i percorsi di errore con type any.

+0

Ah, quindi devi fare "looselyTyped" = someType; numeric = looselyTyped; ':-) – Bergi

15

"Qualsiasi" supporta la covarianza e la contravarianza. Questo perché "any" è un super-tipo e un sottotipo di tutti i tipi.

Quindi questo funziona,

let genericVariable: any = 20; 
let numericVariable: number; 

genericVariable = numericVariable; // No error 
numericVariable = genericVariable; // No error 

supporta mista covarianza solo. È un super-tipo e non un sottotipo di tutti i tipi.

let genericVariable: mixed = 20; 
let numericVariable: number; 

numericVariable = genericVariable; // This shows error 
genericVariable = numericVariable; // This works fine. 

covarianza - tipo generico (genitore) potrebbe essere sostituito dal tipo speciale (bambino)

controvarianza - tipo speciale (bambino) potrebbe essere sostituito da tipo generico (genitore). Questo è un problema, a meno che non sia protetto da alcune convenzioni.

Problemi correlati