Skip to content

Is a switch alternative, but more cleaned and elegant.

Notifications You must be signed in to change notification settings

vickvasquez/ts-match

Repository files navigation

@vickvasquez/ts-match

Running Tests

@vickvasquez/ts-match is a switch alternative, but more cleaned and elegant, inspired in php match https://www.php.net/manual/es/control-structures.match.php

Installation

  npm install @vickvasquez/ts-match

Usage

ES6

import match from '@vickvasquez/ts-match'

CommonJS

const match = require('vickvasquez/ts-match').default

Example

import match from '@vickvasquez/ts-match'

const result = match('foo', {
  foo: 'foo',
  bar: 'bar'
})

console.log(result) // foo

Default value

import match from '@vickvasquez/ts-match'

const result = match('unknow', {
  foo: 'foo',
  bar: 'bar',
  default: 'default'
})

console.log(result) // default

Use as factory

import match from '@vickvasquez/ts-match'

interface Print {
  print(): string
}

class A implements Print {
  print() {
    return 'foo'
  }
}

class B implements Print {
  print() {
    return 'bar'
  }
}

class Printer {
  print(printer: Print) {
    return printer.print()
  }
}

const cases = {
  a: new A(),
  b: new B(),
}

const printer = match('a', cases)
const printerB = match('b', cases)

console.log(new Printer().print(printer)) // foo
console.log(new Printer().print(printerB)) // bar

Using Map

import match from '@vickvasquez/ts-match'

const map = new Map([[foo, 'foo'], [bar, 'bar']])

const bar = match('bar', map)

console.log(bar) // bar

Options

skipFunctionsExecution (default: false)

Indicates whether cases that are of type function should be executed or not, when is true, the function is not executed instead a reference to the function is returned giving the developer the option to execute it manually. (closure)

import match from '@vickvasquez/ts-match'

const cases = {
  foo: () => 'foo',
  bar: 'bar',
  default: 'default'
}

const foo = match('foo', cases)
const fooFn = match('foo', cases, { skipFunctionsExecution: true })

console.log(foo) // foo

console.log(fooFn) // Function
console.log(fooFn()) // foo

About

Is a switch alternative, but more cleaned and elegant.

Resources

Stars

Watchers

Forks

Packages

No packages published