Skip to content

Jciel/tsjmaybe

Repository files navigation

tsjmaybe

Maybe is a type with tow variantes Some and None, can have nothing (None) or some value (Some).
The Maybe variable makes it possible to have a something depending on the particular value.


Starting

tsjmaybe is available as a package on npm.

$ npm install tsjmaybe

Definition

type Maybe<T> = 
    | Some<T>
    | None<T>


getValue -> T

const existString: Maybe<string> = new Some(" tsjmaybe ")
const noExistString: Maybe<string> = new None()

existString.getValue()   // " maybe "
noExistString.getValue() //

map <U>(T) => U -> Maybe<U>

const existString: Maybe<string> = new Some(" tsjmaybe ")
const noExistString: Maybe<string> = new None()

const resultMapExistString = existString
                               .map(s => s.trim())
                               .map(s => s.toUpperCase()) // Maybe<string> -> Some { value: "TSJMAYBE" }


const resultMapNoExistString = noExistString
                                 .map(s => s.trim())
                                 .map(s => s.toUpperCase()) // Maybe<string> -> None {}

matchWith <A>{ Some: (T) => A, None: () => A } -> Maybe<A>

const existString: Maybe<string> = new Some(" tsjmaybe ")
const noExistString: Maybe<string> = new None()

const matchWithString = existString.matchWith({
        Some: (value: string) => {              
            return value.length
        },
        None: () => {
            return
        }
    }) // Maybe<number> -> Some { value: 10 }

const matchWithNoString = noExistString.matchWith({
        Some: (value: string) => {
            return value.length
        },
        None: () => {
            return
        }
    }) // Maybe<string> -> None {}


const matchWithReturnNewMaybe = noExistString.matchWith({
        Some: (value: string) => {
            return value.length
        },
        None: () => {
            return "Add some string"
        }
    }) // Maybe<string> -> Some { value: "Add some string" }

withDefaultValue T -> Maybe<T>

const some: Maybe<number> = new Some(7) // Some { value: 7 }
const none: Maybe<number> = new None()  // None {}

const defaultSome = some.withDefaultValue(4) // Some { value: 7 }
const defaultNone = none.withDefaultValue(4) // Some { value: 4 }


const noExistString: Maybe<string> = new None()
const matchWithNoString = noExistString.matchWith({
        Some: (value: string) => {
            return value.length
        },
        None: () => {
            return undefined
        }
    }).withDefaultValue(6) // Maybe<number> -> Some { value: 6 }


Contribute

Report a suggestion by posting an issue
Star the project

Running tests

npm run test

License

MIT

About

Implementation of Maybe type in Typescript

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published