给出一些冻结的数组对象,该对象旨在表示表单字段的可能值。
const FROZEN_LIST = Object.freeze(['Value1', 'Value2', 'Value3'])
如何将表单对象定义设置为仅接受在Flow.js中为此字段键在此数组中定义的可能值?
// @flow
import {FROZEN_LIST} from (...)
type FormData = {
fieldKey: Array<string>, // this is not desirable because I want it to be more specific.
fieldKey: typeof FROZEN_LIST // is this how its done?
}
在这种情况下,您可以利用$ Keys运算符。 $Keys
根据您的情况:
// @flow
import {FROZEN_LIST} from (...)
type FormData = {
fieldKey: $Keys<typeof FROZEN_LIST.reduce((r,i)=>({...r,...{[i]:i}}), {})>
}
让我知道它是否有效。
如果可以更改原始的FROEZEN_LIST
,会更好:
const FROZEN_LIST = Object.freeze({'Value1':'Value1', 'Value2',:'Value2', 'Value3':'Value3'})
// @flow
import {FROZEN_LIST} from (...)
type FormData = {
fieldKey: $Keys<typeof FROZEN_LIST>
}
您也可以遵循此说明:Union from array literal