Redux, Typescript, Angular, Redux Observable, Ngrx.
action type remains the same type SetAgeAction = ReturnType<typeof setAge> // type { type: '[user] SET_AGE' payload: number } PROS: ( as before ) action type is inferred from implementation and because of that, it stays in sync! we don’t have to cast our type more concise than before CONS: none I