Hacker News new | ask | show | jobs
by mmis1000 1425 days ago
> {dev:true} | {prod:true} | {stage:true}

This can't be accessed safely. Because all value in typescript can be sub type of how it typed.

It means code following will pass.

    var a = { dev: true, get prod() { throw Error() } }
    var b: { dev:true } | {prod:true} | {stage:true} = a

And there is no guarantee that access any of these fields is safe.
1 comments

That did not compile for me with my TS settings;

> Type '{ dev: boolean; readonly prod: void; }' is not assignable to type '{ prod: true; }'

It's still a bad solution though; it allows nonsense values like {dev:true, prod:true}.

That is because I forgot to assert the true as literal true, so it defaults to be boolean (where both true and false are allowed)