Javascript静态类型检测器Flow混合类型(Mixed Types介绍

517 2 年前
Mixed传入的值是一个未知的类型,它可以是任何类型,接收任何类型的值。字符串,数值,对象,函数等,当你尝试使用混合类型的值时,你必须先确定实际类型,否则会抛出异常。

(Mixed Types)

使用mixed表示未知的类型(unknown types)

一般来说,程序都到几种不同类别的类型:

单个类型

(A single type)

这里输入值只能是一个number

function square(n: number) {
  return n * n;
}

一组不同可能类型

(A group of different possible types)

这里输入值既可以是一个 string 也可以是一个 number

function stringifyBasicValue(value: string | number) {
  return '' + value;
}

基于另一类型的类型

(A type based on another type)

这里,返回类型跟传入函数参数值的类型相同。

function identity<T>(value: T): T {
  return value;
}

任意类型

(An arbitrary type that could be anything)

这里,传递的值一个未知类型,它可以是任何类型,并且函数将仍然工作。

function getTypeOf(value: mixed): string {
  return typeof value;
}

这些未知类型不常见,但有时却有用。

你可以使用mixed代表这些值(未知类型值)。

只进不出

(Anything goes in, Nothing comes out)

mixed 将接受任何类型的值。 Strings, numbers, objects, functions等,任何东西都可以。

// @flow
function stringify(value: mixed) {
  // ...
}

stringify("foo");
stringify(3.14);
stringify(null);
stringify({});

当你试图使用一个mixed类型的值时,首先应该算出它的真实类型是什么,否则会导致错误。

// @flow
function stringify(value: mixed) {
  // $ExpectError
  return "" + value; // Error!
}

stringify("foo");

相反,必须细化它来确保这个值是某一特定类型。

//@fleo
function stringify(value:mixed){
	if(typeof value === 'tring'){
		return '' + value
	}else{
		return ''
	}
}
stringify("foo");

因为typeof value === 'string'检查,Flow知道在if语句的里面只可能是string。这就是所谓的细化(refinement

更多信息,请访问 混合类型

分类栏目
© 2018邮箱:11407215#qq.comGitHub沪ICP备12039518号-6