Classy Type-Wrapper for Flow
A tiny module that gives you the TypeWrapper
class + static methods bundle, for quick definition of type wrappers.
What are Type Wrappers?
A way of declaring a new type, that is simply a wrapper around another type, to make mix-ups easier to prevent. For example, declaring a wrapper around string
called UserID
, to stop User IDs from being mixed up with other strings, like usernames or descriptions.
This is elaborated on in this blog post.
Usage
// @flow; // Declare a new type wrapper:<string> {} // String -> UserID-wrapped Stringconst id = UserID; // $ExpectError - Can't use like a string without unwrapping.const wrong = "Hello, user #" + id; : string { // UserID-wrapped String -> String const userIdAsString = UserID // Unwrapped; fine to use now. return "User #" + userIdAsString + ": " + name;} console;
See the examples/
directory for more.
Inspired by @mkscrg's original "class bundle" pattern from this Flow issue.