使用Flow限制对象值

时间:2017-07-12 18:04:53

标签: javascript flowtype

有没有办法在Flow中键入一个对象,以便它可以有任意数量的键,但可以键入这些键的值。

即。一种强制对象中的所有值都是字符串的类型

const validObject = {
  foo: 'bar',
  bar: 'baz'
}

const invalidObject = {
  foo: 1,
  bar: 'baz'
}

无效对象将失败,因为它有一个数字作为其中一个键。

1 个答案:

答案 0 :(得分:4)

如果您不知道对象的确切形状,但是您知道它来自string -> string,那么您可以使用字典类型:

type Valid = {[key:string]: string}

const validObject: Valid = {
  foo: 'bar',
  bar: 'baz'
}

const invalidObject: Valid = {
  foo: 1, // error
  bar: 'baz'
}

如果你知道对象的形状,你可以定义类似这样的类型

type Valid = {
  foo: string,
  bar: string
}

const validObject: Valid = {
  foo: 'bar',
  bar: 'baz'
}

const invalidObject: Valid = {
  foo: 1, // error
  bar: 'baz'
}

此外,你可以使用一种名为" hamburger syntax"使用{| |}将类型设为exact类型,仅允许foobar生效。 (Read more here

// @flow

type Valid = {|
  foo: string,
  bar: string
|}

const validObject: Valid = {
  foo: 'bar',
  bar: 'baz',
  baz: 'foo' // error
}