monads
1.0.0
Если вы используете этот репо, смотрите его
Вдохновлен ржавчиной
Нулевые зависимости • легкий • функциональный
NPM Установка @Thames/Monads
Option<T>
ТипОпция представляет собой необязательное значение: каждый вариант является либо некоторым, и содержит значение, либо нет, а не.
Примечание
Полная документация здесь: опция
Import {option, некоторые, none} от '@thames/monads'; const divide = (numerator: number, denimanator: number): опция <число> => { if (знаменатель === 0) {вернуть нет; } else {return some (numerator / guinator); }}; // возвращаемое значение функции - это OptionConst result = divide (2.0, 3.0); // шаблон соответствует, чтобы получить ValueConst message = result.match ({{ Некоторые: (res) => `Результат: $ {res}`, Нет: 'не может разделить на 0',}); console.log (сообщение); // "Результат: 0,6666666666666666"
Result<T, E>
ТипРезультат представляет собой значение, которое является либо успешным (ОК), либо сбоем (ERR).
Примечание
Полная документация здесь: результат
Import {result, ok, err} from '@thames/monads'; const getIndex = (values: string [], value: string): result <номер, строка> => { const index = values.indexof (value); switch (index) {case -1: return err ('значение не найдено'); по умолчанию: return ok (index); }}; const values = ['a', 'b', 'c']; getIndex (values, 'b'); // ok (1) getIndex (значения, 'z'); // err ("значение не найдено")
Either<L, R>
Либо представляет значение, которое либо влево, либо вправо. Это мощный способ справиться с операциями, которые могут привести к двум явно различным типам результатов.
Примечание
Полная документация здесь: либо
Import {либо, слева, справа} от '@Thames/monads'; const divide = (numerator: number, denimator: number): либо <string, number> => { if (знаменатель === 0) {return Left ('не может разделить на 0'); } else {return right (numerator / guindator); }}; const result = divide (2.0, 3.0); const message = result.match ({ Слева: (err) => `error: $ {err}`, Справа: (res) => `Результат: $ {res}`,}); console.log (сообщение); // "Результат: 0,6666666666666666"