有什么办法可以做这样的事情吗?
// @flow
function FailureActionType(name: string): Type {
return {type: name, error: string}
}
type SearchFailureAction = FailureActionType("SEARCH_FAILURE")
很显然,在return语句中键入/赋值的方式存在问题,但是这样可以使
type SearchFailureAction = { type: "SEARCH_FAILURE", error: string }
有什么办法吗?
答案 0 :(得分:1)
您想要一个通用名称。
type FailureActionType<T: string> = { type: T, error: string }
<T>
说这种类型取决于另一种类型。<T: string>
表示此从属类型必须是字符串类型。{ type: T, error: string }
意味着结果类型必须在对象的type
键上具有从属类型。您可以通过在<>中传递T
的值来使用它,如下所示:
type SearchFailureAction = FailureActionType<"SEARCH_FAILURE">
const action1: SearchFailureAction = { type: 'SEARCH_FAILURE', error: 'some error' }
const action2: SearchFailureAction = { type: 'BAD', error: 'some error' } // type error
泛型非常强大。阅读文档以获取更多信息。 https://flow.org/en/docs/types/generics/