poor man's pattern matching :traffic_light:
Install
yarn add @housinganywhere/match
npm i @housinganywhere/match
Use
import * as React from 'react';
import match from '@housinganywhere/match';
type Status = 'loading' | 'error' | 'success';
enum Status {
loading = 'loading',
error = 'error',
success = 'success',
}
const StatusMsg: React.SFC<{ status: Status }> = ({ status }) =>
match<Status, React.ReactNode>({
loading: () => <Spinner />,
error: () => <Alert type="danger">There was an error</Alert>,
success: () => <Alert type="success">Yay! It worked</Alert>,
})(status);
For matching several cases together use wildMatch. All the missing cases
will be handled by case _
.
import * as React from 'react';
import { wildMatch } from '@housinganywhere/match';
type Vowels = 'a' | 'e' | 'i' | 'o' | 'u';
const isA = wildMatch<Vowels, string>({
a: () => 'Yay!',
_: (v) => `Nope, "${v}" is not "a"`,
});
isA('a');
isA('e');
isA('i');
isA('o');
isA('u');
License
MIT © 2019
HousingAnywhere