こんな感じ。
// @flow
export type Action<T: string, P> =
| {
type: T,
payload: P,
meta?: mixed
}
| {
type: T,
payload: Error,
error: true,
meta?: mixed
};
こうしておけば error
が true
かどうかで payload
の型が決まる。
// @flow
type HogeAction = Action<"HOGE", string>
if (action.type === "HOGE")
if (action.error) {
// action.payload is Error
} else {
// action.payload is string
}
}
他の方法
ググると次のような奴が見つかった。
でもこれだと error
が true
かどうかで payload
の型が決まることはない。
// @flow
type Action<A: string, P> = {|
type: A,
payload?: P | Error,
error?: boolean,
meta?: mixed
|};
参考
- Best practice redux actions with flowtype?
https://stackoverflow.com/questions/43338248/best-practice-redux-actions-with-flowtype - redux-actionsのcreateActionでFlux Standard Actionに則ったerror=trueなActionを作る #react
https://budougumi0617.github.io/2018/10/10/how-to-throw-error-by-create-action-of-redux-actions/