};
const fooBarFail: FooBarFailT = { foo: '123', bar: 12 }; // Error!
const fooBar: FooBarT = { foo: '123', bar: 12 }; // Works!
对象的maps (objects as maps)
虽然有了maps 这个数据结构 但是把对象当作maps 使用 依然很常见
// @flow
var o: { [string]: number } = {}; // 制定key值的类型, 可以设置这个类型下的任何key值
o["foo"] = 0;
o["bar"] = 1;
var foo: number = o["foo"];索引也是一个可选的名字
// @flow
var obj: { [user_id: number]: string } = {};
obj[1] = "Julia";
obj[2] = "Camille";
obj[3] = "Justin";
obj[4] = "Mark";索引可以和命名属性混合
// @flow
var obj: {
size: number,
[id: number]: string // 此处混合了 索引和命名
} = {
size: 0
};
function add(id: number, name: string) {
obj[id] = name;
obj.size++;
}对象类型(Object Type)
有时候你想创任意的对象, 那么你就可以传一个空对象,或者一个Object 但是后者是不安全的, 建议避免使用
数组类型
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"]简写
let arr: number[] = [0, 1, 2, 3];
let arr1: ?number[] = null; // Works!
let arr2: ?number[] = [1, 2]; // Works!
let arr3: ?number[] = [null]; // Error!?number[] === ?Array<number>
数组的访问时不安全的
// @flow
let array: Array<number> = [0, 1, 2];
let value: number = array[3]; // Works.// 这里超出了数组的容量你可以通过下面这样的做法来避免, flow 并未修复这个问题, 所以需要开发者自己注意
let array: Array<number> = [0, 1, 2];
let value: number 关键词:javascript静态分类如何解析flow的用法(详细)