带括号和省略号的流中的类型别名

问题描述 投票:0回答:1
type WeirdCustomType = {[int]: boolean, ...};

WeirdCustomType是什么样的结构?它仅仅是{int:boolean}类型的数组吗? (即,键是一个整数,值是一个布尔值)?如果是这样,……这里是什么意思?在哪里可以了解到这种特殊的类型别名用法?

javascript flow
1个回答
0
投票

WeirdCustomType是“ Explicit inexact object type

其属性包括:

  • A)具有布尔值的整数键的属性
    • int周围的括号表示我们所指的是属性键,并且这些键属于int类型(实际上应为number,请参见答案的最后一部分)
    • 这遵循对象及其键的解构语法,您可以在MDN文档上阅读有关“ Computed object property names and destructuring”的更多信息
  • B)具有其他键和值类型的其他属性

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]

请参见https://flow.org/en/docs/types/primitives/

© www.soinside.com 2019 - 2024. All rights reserved.