1
Fork 0
solar-conflux/typescript/option/README.md
Matei Adriel 664a46319d
typescript(option): chore: updated readme
Signed-off-by: prescientmoon <git@moonythm.dev>
2019-12-25 16:25:30 +02:00

2.2 KiB

npm (scoped) npm bundle size (scoped) forthebadge

Option

Probably the most opinionated implementation of the Option type for typescript.

Features:

  • Large amount of helpers (curently 25), more than f#'s and elm's core libraries combined.
  • Typesafe:
    const foo0: Option<string> = None // works
    const foo1: Option<string> = Some('foo1') // works
    const foo2: Option<string> = 'foo2' // errors out
    const foo3: Option<string> = null // errors out
    const foo4: Option<string> = Some(4) // errors out
    
  • Native equality:
    Some(7) === Some(7) // true
    Some(7) === Some(5) // false
    Some(7) === None // false
    

Limitations

Both limitaions bellow come from the lack of nominal-typing offered by typescript and are inherited from the Brand type offered by the utility-types library

  • Due to the way the library works (using the Brand type from utility-types) Some(4) === 4 will return true, similarly to how 4 == "4" returns true (except in this libraries case the === operator will behave the same way).
  • The inner value of Option cannot have a __brand prop (well, tehnically it can but it would be overwritten by the Brand type from utility-types)

Installation

npm install @adrielus/option

(There is also an amd build at /dist/bundle.amd.js which uses the Option namespace)

Usage

For detailed usage read the docs

Note: The docs are still work in progress. Contributions are welcome:)

Contributing

First, clone this repo:

git clone https://github.com/Mateiadrielrafael/option
cd option

Then use pnpm to install the dependencies:

pnpm install

You can use the build command to build the package (this is dont automatically by github actions):

pnpm run build