@bajuh/type-switch
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

@bajuh/type-switch

I created this function to make overloading easier in typescript.

Usage

Constructor overload
class StringContainer {
	
  private data: string;
  
  constructor(count: number, char: string);
  constructor(initialValue: string);
  constructor(cpy: StringContainer);
  constructor(arg1: number | string | StringContainer, char?: string){
    this.data = '';
    TypeSwitch(arg1)(
      Case(Number)
        ((count: number) => this.data = (<string>char).repeat(count)),
      Case(String)
        ((initialValue: string) => this.data = initialValue),
      Case(StringContainer)
        ((cpy: StringContainer) => this.data = cpy.data)
    );
  }
}
Type group
TypeSwitch(maybeNumber)(
  Case(Number, Array)
    ('This is either a number or an array.'),
  Case(Object, Promise)
    ("This is something we don't want")
);
Null/Undefined Check
// only one case type
TypeSwitch(maybeNumber)(
  Case(Number)
  ('Is good.'),
  Case(null)
  (() => {
    throw new Error('Not good.')
  })
);

// behold! case group!
TypeSwitch(maybeNumber)(
  Case(Number)
    ('Is good.'),
  Case(null, undefined)
    (() => {
      throw new Error('Not good.')
    })
);
Fall-through
TypeSwitch(5)(
  Case(Array)
    (FALL_THROUGH, "Won't happen."),
  Case(Number)
    (FALL_THROUGH, 'Will happen.'),
  Case(String)
    (FALL_THROUGH, () => 'This will also happen.'),
  Case(Boolean)
    ('And this will also happen!'),
  Case(Promise)
    ("But this won't."),
  Default('And this one neither.')
);
Result of TypeSwitch
const complicatedNumberToString = TypeSwitch(5)(
  Case(Number)
    (Number.prototype.toString.call),
  Default('Default: in case 5 is not a number')
);

const fallthroughResult = TypeSwitch(5)(
  Case(Array)
  (FALL_THROUGH, "Won't happen."),
  Case(Number)
  (FALL_THROUGH, 'Will happen but result will be something else.'),
  Case(String)
  (FALL_THROUGH, () => 'This will also happen but the result is still not this value.'),
  Case(Boolean)
  ("Yup. This will be the value of 'result'")
);

// assert(fallthroughResult === "Yup. This will be the value of 'result'");

Package Sidebar

Install

npm i @bajuh/type-switch

Weekly Downloads

3

Version

1.0.2

License

MIT

Unpacked Size

35.7 kB

Total Files

16

Last publish

Collaborators

  • jbebe