Very interesting, and I can see the validation benefits. The original example has ‘completed’ always set to false. In the updated example, it appears this now must be passed in through the payload. Does this lose a little bit of flexibility for defaulting values in your reducer? Maybe a more practical example would be a COMPLETE_TODO reducer that sets completed to true always, and the payload should really only needs the id. Would you still want to spread that payload object out?