Flowtype枚举动作redux

时间:2017-12-11 07:55:29

标签: reactjs redux flowtype

仍然很难在react / redux应用程序中使用Flow检查所有内容。

在输入我的动作时,我得到:

type MessageSentAction = { type: 'MSG_SENT', 
  message: string,  
}
type Action = MessageSentAction | AnotherAction;

没有问题,但我想用常量替换MSG_SENT类型。

const actionTypes = { MESSAGE_SENT = 'MSG_SENT'}
...
type MessageSentAction = { type: ActionTypes.MESSAGE_SENT, 
  message: string,  
}

我怎样才能让它发挥作用?我不希望动作字符串在动作,缩减器和类型之间重复... 上面的示例给出了一个错误:"在/作为流类型注释中使用的不合格值。"

2 个答案:

答案 0 :(得分:2)

您可以使用typeof运算符

const actionTypes = { MESSAGE_SENT: 'MSG_SENT'}

type MessageSentAction = { 
  type: typeof actionTypes.MESSAGE_SENT, 
  message: string,  
}

答案 1 :(得分:0)

刚刚找到它......供参考:

const ACTION_TYPES = { MESSAGE_SENT: 'MSG_SENT', TEST: 'test'};
type ActionType = $Values<typeof ACTION_TYPES>;

type MessageSentAction = { type: ActionType, 
  message: string,  
}

function test(t: MessageSentAction) {
  t.type = 'MSG_SENT';
}

将t.type更改为不在ACTION_TYPES值中的内容时,我会收到流错误。

这与之前的答案不同,任何给定的字符串都可以