流类型操作与Object refrerence

时间:2017-06-26 16:33:52

标签: javascript react-redux flowtype

为什么flow使用对象作为参考来抛出错误:

type LoadUserData = { type: actionTypes.LOAD_USER_DATA, user: User };

但是当使用字符串时,不会抛出任何错误:

type LoadUserData = { type: "LOAD_USER_DATA", user: User };

引发的错误是:

Error:(8, 29) Flow: string. Ineligible value used in/as type annotation (did you forget 'typeof'?) LOAD_USER_DATA

2 个答案:

答案 0 :(得分:1)

您可以按照建议使用typeof,但这可能无法达到您想要的效果:

const actionTypes = {
  LOAD_USER_DATA: 'foo'
}

type LoadUserData = { type: typeof actionTypes.LOAD_USER_DATA};

({type: 'bar'}: LoadUserData) // no errors

这是因为Flow将actionTypes.LOAD_USER_DATA的类型推断为string

不幸的是,对于您的用例,您可能只需要在类型中再次写出字符串文字。

答案 1 :(得分:1)

不幸的是,Flow不允许您在类型定义中使用常量。它必须是数据类型或常量,但不能是变量。因此,你必须坚持:

type LoadUserData = { type: 'LOAD_USER_DATA', user: User }

我假设这是Redux动作的类型定义,在这种情况下,Facebook的docs实际上推荐了这个!