美文网首页
Flow元组(Tuple Types)

Flow元组(Tuple Types)

作者: vincent_z | 来源:发表于2018-01-25 22:21 被阅读0次

元组(Tuple Types)

类似元组的数组值

元组是一种列表,但具有有限的一组项目。在JavaScript中,元组是使用数组创建的。
在Flow中,你可以使用[type,type,type]语法创建元组。

let tuple1: [number] = [1];
let tuple2: [number, boolean] = [1, true];
let tuple3: [number, boolean, string] = [1, true, "three"];

当你从元组特定索引中获取值时,它将返回该索引处的类型。

// @flow
let tuple: [number, boolean, string] = [1, true, "three"];

let num  : number  = tuple[0]; // Works!
let bool : boolean = tuple[1]; // Works!
let str  : string  = tuple[2]; // Works!

当你从元组不存在的索引中获取值时,它将返回void

// @flow
let tuple: [number, boolean, string] = [1, true, "three"];

let none: void = tuple[3];  // void

如果Flow不知道你尝试访问哪个索引,它将返回所有可能的类型。

// @flow
let tuple: [number, boolean, string] = [1, true, "three"];

function getItem(n: number) {
  let val: number | boolean | string = tuple[n];
  // ...
}

在元组内设置新值时,新值必须与该索引处的类型匹配。

// @flow
let tuple: [number, boolean, string] = [1, true, "three"];

tuple[0] = 2;     // Works!
tuple[1] = false; // Works!
tuple[2] = "foo"; // Works!

// $ExpectError
tuple[0] = "bar"; // Error!
// $ExpectError
tuple[1] = 42;    // Error!
// $ExpectError
tuple[2] = false; // Error!

严格执行元组长度(元数)

元组的长度被称为“元数”。Flow中严格执行元组的长度。

元组只能匹配长度相同的元组
// @flow
let tuple1: [number, boolean]       = [1, true];
// $ExpectError
let tuple2: [number, boolean, void] = tuple1; // Error!
// @flow
let tuple1: [number, boolean, void] = [1, true];
// $ExpectError
let tuple2: [number, boolean]       = tuple1; // Error!
元组不匹配数组类型

由于Flow不知道数组的长度,因此Array<T>类型不能传递给元组。

// @flow
let array: Array<number>    = [1, 2];
// $ExpectError
let tuple: [number, number] = array; // Error!

此外,元组类型不能传递给Array<T>类型,因为这样可以以不安全的方式改变元组。

// @flow
let tuple: [number, number] = [1, 2];
// $ExpectError
let array: Array<number>    = tuple; // Error!

不能在元组上使用变异数组方法

// @flow
let tuple: [number, number] = [1, 2];
tuple.join(', '); // Works!
// $ExpectError
tuple.push(3);    // Error!

变异的数组方法:

相关文章

网友评论

      本文标题:Flow元组(Tuple Types)

      本文链接:https://www.haomeiwen.com/subject/uovbaxtx.html