javascript - JS 流 : What is the most clean and concise way to define an enum that is also treated like a type

标签 javascript react-native ecmascript-6 flowtype

来自强类型语言,我最近迈出了 React Native 的第一步。我使用 Flow 作为静态类型检查器。但是,我还没有找到一种简洁明了的方法来定义像类型一样处理的枚举类型,并触发“编译器”向我建议 VS Code 中的可能值。

目前我尝试通过以下方式实现这一点

export const CompletionStates = {
    CompletionStateUnbegun: 'unbegun',
    CompletionStateRunning: 'running',
    CompletionStateLost: 'lost',
    CompletionStateWon: 'won',
    CompletionStateCancelled: 'cancelled',
}

export type CompletionState = 
    | CompletionStates.CompletionStateUnbegun 
    | CompletionStates.CompletionStateRunning  
    | CompletionStates.CompletionStateLost 
    | CompletionStates.CompletionStateWon 
    | CompletionStates.CompletionStateCancelled;

有谁知道使用 Flow 定义枚举的更简洁明了的方法。

最佳答案

您可以使用 $Values:

type CompletionStates = {
    CompletionStateUnbegun: 'unbegun',
    CompletionStateRunning: 'running',
    CompletionStateLost: 'lost',
    CompletionStateWon: 'won',
    CompletionStateCancelled: 'cancelled',
};

export type CompletionState = $Values<CompletionStates>;

关于javascript - JS 流 : What is the most clean and concise way to define an enum that is also treated like a type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49067859/

相关文章:

javascript - “箭头功能”和“功能”是否等效/可互换?

javascript - 使用 Javascript 在 iPad 上强制 CSS 过渡

javascript - 导出函数内部的对象

reactjs - 我们可以将sectionList(或scrollView)的粘性标题粘贴到 ScrollView 顶部的相对位置吗?

javascript - 类型错误 : Cannot read property 'characters' of undefined

javascript - JS中是否有相当于 "Array.None"的东西?

javascript - 将 css 添加到具有现有 css 的元素

javascript - jQuery 代码在 Chrome 中有效但在 IE 中无效

javascript - Bootstrap 多重选择在 AngularJS 中不起作用

meteor - 我可以将 wix/react-native-navigation 创建的根组件包装在 ApolloProvider 组件中吗