混合类型(Mixed Types)
单一类型
比如输入值只能是number
function square(n: number) {
return n * n;
}
一组不同的类型:
比如输入值可以是string
和number
function stringifyBasicValue(value: string | number) {
return '' + value;
}
基于另一种类型的类型:
这里的返回值类型将和传递给函数的任何值的类型相同。
function identity<T>(value: T): T {
return value;
}
任意类型
这里传入的值是一个未知的类型,它可以是任何类型,并且该函数仍然可以运行。
function getTypeOf(value: mixed): string {
return typeof value;
}
混合类型mixed
接收任何类型的值。字符串,数值,对象,函数等。
function stringify(value: mixed) {
// ...
}
stringify("foo");
stringify(3.14);
stringify(null);
stringify({});
当你尝试使用混合类型的值时,你必须先确定实际类型,否则会抛出异常。
// @flow
function stringify(value: mixed) {
// $ExpectError
return "" + value; // Error!
}
stringify("foo");
// @flow
function stringify(value: mixed) {
if (typeof value === 'string') {
return "" + value; // Works!
} else {
return "";
}
}
stringify("foo");
通过typeof value==='string'
检查,Flow知道该值只能在if语句中值为string
的情况下处理。