DEV Community

loading...

Discussion on: Emulating TypeScript union types with ReasonML

citizen428 profile image
Michael Kohl • Edited

Try out a typo in the icons definition in my code sample, you'll see the error at compile time 🙂

But that's because you're exercising icons via iconLabel inside the JS.log function. If you remove that it will compile just fine:

Playground

Generally, you wouldn't have a JS.log statement in a library, so if you happen to call icons("arrowDown"); during runtime (i.e. by taking it from a keypress event) you'd get an error about it not being part of [<arrowDonw | arrowLeft ] then, not at compile time.

This wouldn't happen with a regular union type:

Playground 2

That's really all I tried to say 😀

Thread Thread
yawaramin profile image
Yawar Amin Author

Hmm, I still don't see how that could happen though 🤔 at some point in the code we would call icons(something) where something is a polymorphic variant tag. At that point the typechecker would step in to point out if you called it with icons(`arrowDown) which is not handled by the icons function (assuming the typo in its definition). You wouldn't be calling the icons function with a string, it's not stringly typed.

Thread Thread
citizen428 profile image
Michael Kohl

Yup, sorry, the string was a mistake, should have been `arrowDown.

I guess I was thinking too much about a hypothetical case that is either extremely unlikely or impossible, so thanks for taking the time and patiently explaining 😀