为什么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
答案 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实际上推荐了这个!