Skip to content

TomokiMiyauci/pattern-match

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pattern-match

Type-safe functional style pattern matching.

Why

Switch statements are sometimes difficult to use because they are statements.

In particular, they are prone to deep nesting and variable sharing, and you may encounter situations where you need to use let.

match can return a value because it is an expression. It also guarantees pattern comprehensiveness and is as expressive as a switch statement.

In addition, the bundle size is extremely small and the overhead is minimal.

Primitive data types

Given a finite set, TypeScript will instruct it to enumerate all patterns.

import { match } from "https://deno.land/x/pattern_match@$VERSION/mod.ts";

declare const value: "deno" | "node";

const result = match(value, {
  deno: () => "deno is 🦕",
  node: () => "node is 🌳",
});

Collective data types

If the value is an infinite set, not all patterns can be enumerated. Instead, it defines wildcard patterns that will be matched if no pattern is matched.

The compiler will force you to do this.

The special symbol _ represents a wildcard. match provides _ in properties.

import { match } from "https://deno.land/x/pattern_match@$VERSION/mod.ts";

declare const runtime: string;

const latests = match(runtime, {
  deno: () => "1.26.1",
  node: () => "18.10.1",

  [match._]: () => "Unknown",
});

Also, _ is globally exported.

import { _, match } from "https://deno.land/x/pattern_match@$VERSION/mod.ts";

License

Copyright © 2022-present TomokiMiyauci.

Released under the MIT license

About

Type-safe functional style pattern matching

Resources

License

Stars

Watchers

Forks

Packages

No packages published