typescript-pattern-matching
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

Pattern Matching for TypeScript

Paattern matching allows programmers to compare data with defined structures to easily pick one of the available expressions. Many languages that are designed as ‘functional programming languages’ have built-in keywords for pattern matching. Well know examples are F# (match … with) or Haskell (case … of). One language that works very well with functional programming but lacks those features is TypeScript. This library adds support pattern matching to TypeScript.

Read the article about this library for more context.

Features

The features of this library include:

  • Value patterns
  • Record patterns
  • Wildcard patterns
  • Good type inference based on the patterns
  • Negated patterns (including negated type inference)
  • Additional predicates (like when)

Quick Examples

type Option<a> = { kind: 'none' } | { kind: 'some', value: a }
 
let val: Option<string> = { kind: 'some', value: 'hello' }
 
match(val)
  .with({ kind: 'some' }, o => o.value)
  .run()
let blogOverviewResponse: any = /* ... */
 
match<any, Blog[] | Error>(blogOverviewResponse)
  .with([{Id: Number, Title: String}], r => r.map(b => ({id: b.Id, title: b.Title})))
  .with({ errorMessage: String },      r => new Error(r.errorMessage))
  .otherwise(                         () => new Error('client parse error'))
  .run()

About

This library is written by Wim Jongeneel

/typescript-pattern-matching/

    Package Sidebar

    Install

    npm i typescript-pattern-matching

    Weekly Downloads

    57

    Version

    1.0.1

    License

    MIT

    Unpacked Size

    39.9 kB

    Total Files

    11

    Last publish

    Collaborators

    • wim_jongeneel