type WeirdCustomType = {[int]: boolean, ...};
WeirdCustomType
是什么样的结构?它仅仅是{int:boolean}
类型的数组吗? (即,键是一个整数,值是一个布尔值)?如果是这样,……这里是什么意思?在哪里可以了解到这种特殊的类型别名用法?
WeirdCustomType
是“ Explicit inexact object type”
其属性包括:
int
周围的括号表示我们所指的是属性键,并且这些键属于int
类型(实际上应为number
,请参见答案的最后一部分)WeirdCustomType
对象的外观如下:
const inexactObject: WeirdObjectType = {
1: ‘foo’,
2: ‘bar’,
baz: ‘abc’
}
WeirdCustomType
上的省略号明确表明(使其更加清楚),这种类型允许对象具有预期正常对象类型的额外属性。
要禁用该行为,可以使用exact object type。如文档中所述,
与常规对象类型不同,将具有“额外”属性的对象传递给确切的对象类型是无效的。
// @flow
var foo: {| foo: string |} = { foo: "Hello", bar: "World!" }; // Error!
这里是post on Medium,解释了动机。
当前,
{foo: number}
是具有类型foo
的具有属性number
的任何对象的类型。{| foo: number |}
是对象的类型,该对象仅具有类型foo
的属性number
。我们说前一种语法是不精确的对象,而后者是精确的对象。在一些发行版中,Flow将开始将
{foo: number}
视为确切对象。为了表示不精确,必须在对象类型的末尾添加省略号:{foo: number, ...}
。这种新语法迫使开发人员选择不精确。
int
类型的注释Flow实际上没有原始类型int
。整数由number
类型表示。我相信[int]
应该是[number]
。