LIghtweight Functional programming library for TypeScript
yarn add lifts remeda
# or
npm i -S lifts remeda
Shorthand for Immediately Invoked Function Expression
const date = new Date('2020-04-17')
const result: number | null = Do(() => {
// check date is valid
if (!isNaN(date)) {
return date.getDate()
} else {
return null
}
})
result // => 17
// equivalent to
const result = (() => {
if (!isNaN(date)) {
return date.getDate()
} else {
return null
}
})()
Object-Style switch
const fn = (value: string) =>
Switch(value)(
{
a: () => 'String A',
b: () => 'String B',
},
() => null, // default value
)
fn('a') // => 'string A'
fn('b') // => 'string B'
fn('c') // => null (default value)
const parseDate = (dateStr: string): IResult<Date, Error> => {
const date = new Date(dateStr)
// check date is valid
if (!isNaN(date)) {
return Result.ok(date)
} else {
return Result.err(new Error('Invalid Date'))
}
}
parseDate('2020-04-17')
// => { isOk: true, valueOrError: Date('2020-04-17') }
parseDate('foo')
// => { isOk: false, valueOrError: Error('Invalid Date') }
const result = parseDate('2020-04-17')
Result.switch(result)({
ok: (value: Date) => {
// called if result is Ok
return value.getDate()
},
err: (error: Error) => {
// called if result is Err
return null
},
})
// => 17
const result = parseDate('foo')
Result.switch(result)({
ok: (value) => {
return value.getDate()
},
err: (error) => {
return null
},
})
// => null
Wraps Error with Result.err()
if error caught, else wraps value with Result.ok()
.
const result = Result.wrap(() => {
if (condition) {
return true
} else {
throw new Error()
}
})