有没有办法在Flow中键入一个对象,以便它可以有任意数量的键,但可以键入这些键的值。
即。一种强制对象中的所有值都是字符串的类型
const validObject = {
foo: 'bar',
bar: 'baz'
}
const invalidObject = {
foo: 1,
bar: 'baz'
}
无效对象将失败,因为它有一个数字作为其中一个键。
答案 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
类型,仅允许foo
和bar
生效。 (Read more here)
// @flow
type Valid = {|
foo: string,
bar: string
|}
const validObject: Valid = {
foo: 'bar',
bar: 'baz',
baz: 'foo' // error
}