ejemplos ejemplo javascript types flowtype

javascript - ejemplo - ¿Cuál es la diferencia entre `mixed` y` any`?



title case javascript (2)

Los docs dicen:

  • mixed : el "supertipo" de todos los tipos. Cualquier tipo puede fluir a una mixed .
  • any : el tipo "dinámico". Cualquier tipo puede fluir en any , y viceversa

¿Cuál sería el caso donde se mixed y any no se puede usar de manera intercambiable?


"Cualquiera" admite covarianza y contravarianza. Eso es porque "cualquiera" es un super-tipo y un subtipo de todos los tipos.

Por lo tanto, esto funciona,

let genericVariable: any = 20; let numericVariable: number; genericVariable = numericVariable; // No error numericVariable = genericVariable; // No error

mixta apoya la covarianza solamente. Es un super-tipo y no un subtipo de todos los tipos.

let genericVariable: mixed = 20; let numericVariable: number; numericVariable = genericVariable; // This shows error genericVariable = numericVariable; // This works fine.

Covarianza: el tipo genérico (principal) podría sustituirse por un tipo especial (hijo)

Contravarianza: el tipo especial (niño) podría sustituirse por el tipo genérico (principal). Este es un problema, a menos que esté protegido por ciertas convenciones.


La diferencia es "viceversa": any puede fluir hacia otros tipos pero no puede mixed .

/* @flow */ var numeric:number = 0; var looselyTyped:any; var someType:mixed; numeric = looselyTyped; numeric = someType; //only this will throw a flow check error

De los documentos a los que vinculó:

Vale la pena mencionar cualquiera específicamente debido a la naturaleza especial de esta anotación. Use cualquiera para escapar de la tipificación estática de Flow. En otras palabras, si Flow se interpone en su camino, y está absolutamente convencido de que su programa es del tipo correcto, puede silenciar los errores anotando ubicaciones a lo largo de las rutas de error con type any.