string = obj.prop; // Works!
普通对象的非确定属性的类型是不安全的
var obj = {};
obj.foo = 1;
obj.bar = true;
var foo: number = obj.foo; // Works!
var bar: boolean = obj.bar; // Works!
var baz: string = obj.baz; // Works? // 问题在这里 这里的baz 是不存在的属性, 把他定位string 并且给他一个undefined 是可行的, 但是这部安全, 避免使用额外对象类型 (extra object type)
在一个期望正常对象类型的地方,传一个有着额外属性的对象是安全的
// @flow
function method(obj: { foo: string }) {
// ...
}
method({
foo: "test", // Works!
bar: 42 // Works!
});flow 也支持精确的对象类型, 就是对象不能具有额外的属性;
// @flow
var foo: { 关键词:javascript静态分类如何解析flow的用法(详细)