Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including flow-classy-type-wrapper with all npm packages installed. Try it out:

var flowClassyTypeWrapper = require("flow-classy-type-wrapper")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

flow-classy-type-wrapper v1.0.2

Type-wrappers for Flow, quickly defined with ES6 classes.

Classy Type-Wrapper for Flow (npm)

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.


// @flow
import { TypeWrapper } from 'flow-classy-type-wrapper';

// Declare a new type wrapper:
class UserID extends TypeWrapper<string> {}

// String -> UserID-wrapped String
const id = UserID.wrap("123-abcd");

// $ExpectError - Can't use like a string without unwrapping.
const wrong = "Hello, user #" + id;

function greet(userId: UserID, name: string): string {
  // UserID-wrapped String -> String
  const userIdAsString = UserID.unwrap(userId)

  // Unwrapped; fine to use now.
  return "User #" + userIdAsString + ": " + name;

console.log(greet(id, "Bert"));

See the examples/ directory for more.

Inspired by @mkscrg's original "class bundle" pattern from this Flow issue.

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free