【问题标题】:JS Flow: What is the most clean and concise way to define an enum that is also treated like a typeJS Flow:定义一个也被视为类型的枚举的最简洁的方法是什么
【发布时间】:2018-08-10 14:14:49
【问题描述】:

我最近从一种强类型语言开始使用 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 定义枚举的更简洁明了的方法。

【问题讨论】:

    标签: javascript react-native ecmascript-6 flowtype


    【解决方案1】:

    你可以使用 $Values:

    type CompletionStates = {
        CompletionStateUnbegun: 'unbegun',
        CompletionStateRunning: 'running',
        CompletionStateLost: 'lost',
        CompletionStateWon: 'won',
        CompletionStateCancelled: 'cancelled',
    };
    
    export type CompletionState = $Values<CompletionStates>;
    

    【讨论】:

    • 谢谢,使用 $Values 而不是列出可能的 CompletionState 似乎是最好的方法。
    【解决方案2】:

    目前我通过以下方式定义一个枚举

    您在此处定义了 consttype。也可以直接定义enum

    export enum Animals {
      DOG = "Dog", 
      CAT = "cat"
    }
    

    【讨论】:

    • 谢谢,你当然是对的。我稍微编辑了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多