Three flags. Eight combinations.Four real states.

boolean soup
loading:Ferror:Fdata:–idle
loading:Terror:Fdata:–loading
loading:Ferror:Tdata:–error
loading:Ferror:Fdata:✓loaded
loading:Terror:Tdata:–impossible — compiles
loading:Terror:Tdata:✓impossible — compiles
loading:Terror:Fdata:✓impossible — compiles
loading:Ferror:Tdata:✓impossible — compiles
discriminated union
{ kind: 'idle' }
{ kind: 'loading' }
{ kind: 'error'; error: string }
{ kind: 'loaded'; data: T }
nothing else is constructible
gdhami.net