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