`mixed`和`any`有什么区别?

Ato*_*ton 43 javascript types flowtype

文件说:

  • mixed:所有类型的"超类型".任何类型都可以流入mixed.
  • any:"动态"类型.任何类型都可以流入any,反之亦然

哪里会是一个什么情况mixedany不能互换使用?

eku*_*ela 25

区别在于"反之亦然":any可以流入其他类型但mixed不能.

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

numeric = looselyTyped;
numeric = someType; //only this will throw a flow check error
Run Code Online (Sandbox Code Playgroud)

从您链接到的文档:

由于此注释的特殊性,值得特别提及.使用any来逃避Flow的静态类型.换句话说,如果Flow阻碍了您,并且您绝对确信您的程序类型正确,则可以通过在类型为any的错误路径上注释位置来消除错误.


Ven*_*CKi 20

"任何"支持协方差和逆变.那是因为"any"是所有类型的超类型和子类型.

因此,这工作,

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

genericVariable = numericVariable; // No error
numericVariable = genericVariable; // No error
Run Code Online (Sandbox Code Playgroud)

混合仅支持协方差.它是超类型而不是所有类型的子类型.

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

numericVariable = genericVariable; // This shows error
genericVariable = numericVariable; // This works fine.
Run Code Online (Sandbox Code Playgroud)

协方差 - 通用类型(父)可以用特殊类型(子)代替

逆变 - 特殊类型(子)可以用泛型类型(父级)代替.这是一个问题,除非受某些约定的保护.