option-t

- This library represents Option type in ECMAScript.
- You can sort "nullable" convention in your project.
- APIs are inspired by Rust Language's
Option<T>
. - TypeScript friendly APIs.
- We recommend to use this with some static type systems like TypeScript.
Installation
npm install --save option-t
Usage
const { Some, None, } = require('option-t');
const some = new Some(1);
console.log(some.isSome);
console.log(some.unwrap());
const none = new None();
console.log(none.isSome);
console.log(none.unwrap());
API
- Wrapper objects
- Utility functions for these types (TypeScript ready).
JSON Representation
Some types defines JSON representations if you serialize them by JSON.stringify()
.
Idioms
- You can see some idioms of this library for the interoperability to JavaScript world.
See also
These documents would provide more information about Option<T>
and Result<T, E>
.
These are written for Rust, but the essense is just same.
Semantics
See the document.
FAQ
How to represent same things without this library?
Of course, there some alternative approaches. We introduce them.
Use an object with destructuring assignment.
From ECMA262 6th, we can use destructuring assignment.
It provides a convinient way to handle/unwrap a value in an object.
type Option<T> = {
ok: boolean;
value: T;
};
const { ok, value, } = getSomeValue();
if (ok) {
}
else {
}
This does same thing which is like a return value of iterator.next()
.
But this approach cannot call instance methods on their returned values.
If you would like to handle a result more seemless, we recommend to use option-t
.
On the other hand, this way (and option-t
) need to allocate an object.
This allocation cost would be a cost.
In the future, a JavaScript runtime may make it more cheap,
but we don't recommend to use this approach if you requires a high performance computing extremely.
Runtime Checking
This would be most popular way to handle a returned value in JavaScript.
const value = getSome();
if (value !== undefined) {
}
else {
}
These approach don't need an extra object allocation like the above approach (and option-t
).
And you need to think about "what is null type? including undefined
or not?".
At least in ECMA262, There are some ways to represent "there're no value".
undefined
(e.g. Map.prototype.get()
)null
(e.g. RegExp.prototype.exec()
)-1
(e.g. String.prototype.indexOf()
)
Use static type checker
Some static type checking tools provides a way to check nullability.
Flowtype and TypeScript checks with thier control flow analysis
(Sorry, I don't know the details of Google Closure Compiler's behavior).
Thus you can leave a runtime nullability checking in your code.
License
MIT License
Contribution
- Use
yarn
to install dev-dependency toolchains.