As people keep saying, type assertions do not have as strong compile time assurances as ADTs.
The complexity is inherent and you can either choose to make it implicit and play the losing game of ensuring it doesn't fail with tests or make it explicit from the outset.