Pattern matching object structures. Semi-related to tc39/proposal-pattern-matching.
yarn add match-with
Basic syntax:
import { match } from "match-with"; match(subject: any) .with(pattern1: any, callback1: (subject, pattern1) => result: any) .with(pattern2: any, callback2: (subject, pattern2) => result: any) .default(callback3: (subject) => result: any) .result;
Examples:
... const subject = { one: 1, two: undefined, three: "3", }; match(subject) .with({ one: 1, two: undefined }, () => { return "match"; }) .result; // "match"; match(subject) .with({ one: 2 }, () => { // Skipped. }) .default(() => { return 1; }); match(subject) .with({ one: n => n < 2 }, () => { console.log(true); }); match(subject) .with({ four: match.EXISTS }, () => { // Skipped. }) .with({ four: undefined }, () => { return 4; });
Let me know what you think. After you β this project, follow me @Rygu on Twitter.
BSD 3-Clause license. Copyright Β© 2019, Rick Wong. All rights reserved.