美文网首页
Flow数组类型(Array Types)

Flow数组类型(Array Types)

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

数组类型(Array Types)

注意:数组有时也被用作JavaScript中的元组,这些元素在Flow中有不同的注释。

数组是JavaScript中特殊的类列表对象类型。你可以用几种不同的方式创建数组。

new Array(1, 2, 3); // [1, 2, 3];
new Array(3);       // [undefined, undefined, undefined]
[1, 2, 3];          // [1, 2, 3];

你也可以创建数组并稍后为其添加值:

let arr = []; // []
arr[0] = 1;   // [1]
arr[1] = 2;   // [1, 2]
arr[2] = 3;   // [1, 2, 3]

数组类型(Array Type)

要创建数组类型,可以使用Array<Type>type,其中Type是数组中元素的类型。

let arr: Array<number> = [1, 2, 3];
let arr1: Array<boolean> = [true, false, true];
let arr2: Array<string> = ["A", "B", "C"];
let arr3: Array<mixed> = [1, true, "three"]

数组速记语法(Array Type Shorthand Syntax)

数组语法更简短的方式是:Type[]

let arr: number[] = [0, 1, 2, 3];

?Type[]?Array<T>是等价的。

// @flow
let arr1: ?number[] = null;   // Works!
let arr2: ?number[] = [1, 2]; // Works!
let arr3: ?number[] = [null]; // Error!

如果你想使它成为Array<?T>,你可以使用括号:(?Type)[]`

// @flow
let arr1: (?number)[] = null;   // Error!
let arr2: (?number)[] = [1, 2]; // Works!
let arr3: (?number)[] = [null]; // Works!

数组访问是不安全的

当你从数组中检索一个元素时,总是有可能是未定义的。你可以访问一个超出数组边界的索引,或者访问稀疏数组中不存在的元素。

// @flow
let array: Array<number> = [0, 1, 2];
let value: number = array[3]; // Works. ^ undefined
// @flow
let array: Array<number> = [];

array[0] = 0;
array[2] = 2;

let value: number = array[1]; // Works. ^ undefined

为了安全起见,Flow必须将每个数组访问标记为“可能未定义”。但是Flow不这样做,因为使用起来非常不方便。你将被迫改进访问数组时获得的每个值的类型。

let array: Array<number> = [0, 1, 2];
let value: number | void = array[1];

if (value !== undefined) {
  // number
}

相关文章

网友评论

      本文标题:Flow数组类型(Array Types)

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