From 664a46319dd6700b1adad9a959a868341ca0960f Mon Sep 17 00:00:00 2001 From: Matei Adriel Date: Wed, 25 Dec 2019 16:25:30 +0200 Subject: [PATCH] typescript(option): chore: updated readme Signed-off-by: prescientmoon --- typescript/option/README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/typescript/option/README.md b/typescript/option/README.md index cf3f23c..4300434 100644 --- a/typescript/option/README.md +++ b/typescript/option/README.md @@ -4,6 +4,35 @@ # 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: + ```ts + const foo0: Option = None // works + const foo1: Option = Some('foo1') // works + const foo2: Option = 'foo2' // errors out + const foo3: Option = null // errors out + const foo4: Option = Some(4) // errors out + ``` +- Native equality: + ```ts + 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](https://github.com/piotrwitek/utility-types) library + +- Due to the way the library works (using the `Brand` + type from [utility-types](https://github.com/piotrwitezutility-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](https://github.com/piotrwitek/utility-types)) + ## Installation ```sh @@ -16,6 +45,8 @@ npm install @adrielus/option For detailed usage read [the docs](https://github.com/Mateiadrielrafael/option/tree/master/docs/main.md) +> Note: The docs are still work in progress. Contributions are welcome:) + # Contributing First, clone this repo: