首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“混合”和“任意”有什么区别?

“混合”和“任意”有什么区别?
EN

Stack Overflow用户
提问于 2015-05-02 15:42:53
回答 3查看 8.7K关注 0票数 47

文档说:

  • mixed:是所有类型的“超级类型”。任何类型都可以流到mixed中。
  • any:是“动态”类型。任何类型都可以流入any,反之亦然。

什么情况下mixedany不能互换使用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-04 05:32:08

区别在于“反之亦然”:any可以流到其他类型,但mixed不能。

代码语言:javascript
复制
/* @flow */
var numeric:number = 0;
var anyTyped:any;
var mixTyped:mixed;

numeric = anyTyped;
numeric = mixTyped; // This will throw a flow check error: "Cannot assign `mixTyped` to `numeric` because mixed is incompatible with number. [incompatible-type]"

从你链接到的文档中:

由于这一注解的特殊性,任何具体的标注都是值得的。使用any来转义流的静态类型。换句话说,如果流妨碍了您的工作,并且您完全相信您的程序是正确的,那么您可以使用类型any注释错误路径上的位置,从而使错误保持沉默。

票数 26
EN

Stack Overflow用户

发布于 2016-12-07 19:58:09

"Any“支持协方差和反方差。这是因为"any“是所有类型的超级类型和子类型。

因此这是可行的,

代码语言:javascript
复制
let genericVariable: any = 20;
let numericVariable: number;

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

混合只支持协方差。它是一个超级类型,不是,是所有类型的子类型。

代码语言:javascript
复制
let genericVariable: mixed = 20;
let numericVariable: number;

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

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

反方差-特殊类型(子类型)可以由泛型类型(父类型)代替。这是一个问题,除非受到某些公约的保护。

票数 22
EN

Stack Overflow用户

发布于 2018-10-31 23:11:46

当flow看到any时,这意味着您可以使用任何类型。程序对参数的类型漠不关心,也不会试图推断结果类型。所以结果类型也将是any

例如,以下代码不会报告任何错误:

代码语言:javascript
复制
// @flow
function add(one: any, two: any): number {
  return one + two;
}

add(1, 2);     // Works.
add("1", "2"); // Works.
add({}, []);   // Works.

但是,“混合”类型应该以某种方式进行处理,以推断实际类型。

代码语言:javascript
复制
// @flow
function stringify(value: mixed) {
  // $ExpectError
  return "" + value; // Error!
}

stringify("foo");

相反,您必须通过精炼来确保值是特定类型的。

代码语言:javascript
复制
// @flow
function stringify(value: mixed) {
  if (typeof value === 'string') {
    return "" + value; // Works!
  } else {
    return "";
  }
}

stringify("foo");
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30004233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档