0350517b71
Signed-off-by: prescientmoon <git@moonythm.dev> |
||
---|---|---|
.. | ||
.github/workflows | ||
.vscode | ||
docs | ||
src | ||
test | ||
.gitignore | ||
.prettierrc | ||
LICENSE | ||
package.json | ||
pnpm-lock.yaml | ||
README.md | ||
rollup.config.ts | ||
tsconfig.json |
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 how4 == "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 theBrand
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