如何从数组中获取联合类型?

时间:2018-12-31 12:54:25

标签: flowtype

我有文本字符串数组,并且在其他地方使用它。如何将其转换为联合类型?

获取方式:

type Message = 'hello world' | ...

来自

const messages = ['hello world', ...]

1 个答案:

答案 0 :(得分:2)

这很棘手,因为Flow应该为messages的类型推断带有文字字符串元素的元组类型,但是相反,它将类型推断为Array<string>。这意味着包含每个字符串内容的信息将丢失。从理论上讲,您应该能够编写type Message = $ElementType<typeof messages, number>,但是从Flow v0.89.0开始,该功能不起作用。

您可以做的是,以Flow确实保留文字类型信息(例如对象中的键)的形式表示消息,并从中提取消息的类型和列表:

const messageMap = {
  "hello world": 1, // you can use whatever you want for the values
  "goodbye": 2
}

const messages = Object.keys(messageMap)

type Message = $Keys<typeof messageMap>