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 unamixed
.any
: el tipo "dinámico". Cualquier tipo puede fluir enany
, 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.