Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

optional-chain

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

optional-chain

Optional chaining implementation in TypeScript. Uses [`option type`](https://en.wikipedia.org/wiki/Option_type)

  • 0.1.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
24
increased by4.35%
Maintainers
1
Weekly downloads
 
Created
Source

optional-chain travis-ci

Optional chaining implementation in TypeScript.
Uses option type

Requirement

This library requires TS 2.8+ version to use conditional type

Install

npm install optional-chain

Usage

import { optional } from "optional-chain";

type User = {
  name?: {
    first: string
  }
}
const user: User = getUser(); // { name: null }
const optionalUser = optional(user);
optionalUser.k("name").k("first").get(); // undefined, does not throw an exception.

API

optional-chain library exports below APIs.

optional

optional is a fuctory function to creates a Option instance.

Option<T>

An instance of Option can be constructed with a value for the souce of T. Option class can hold a type of Some or None based on given source.

.k(name: string)
type User = {
  name: string;
  sns: SNS;
  followers: User[];
};

type SNS = {
  twitter?: {
    username: string;
  };
  facebook?: {
    url: string;
  };
};

const user: User = {
  name: "yayoc",
  sns: {
    twitter: {
      username: "@yayoc_"
    }
  },
  followers: []
};
const optionalUser = optional(user);
optionalUser.k("name"); // Option<string>
optionalUser.k("sns"); // Option<{twitter: { username: string }}>
optionalUser.k("sns").k("facebook"); // None
optionalUser.k("foo"); // compile error

Returns a Option<T> narrowed by specified property of Object.

.i(index: number)

Returns a Option<T> narrowed by specified index of Array. If index is not in array, this returns Option<undefined>.

optionalUser
  .k("followers")
  .i(0)
  .k("name"); // None
.get()

Returns a value of Option.

optionalUser.k("name").get(); // yayoc
.match({ some: T => any, none: T => any })

A public method of Option to do pattern matching. If target Option is Some type, this funciton returns a result of given some function. Otherwise, this function returns a result of given none function.

optionalUser
  .k("sns")
  .k("twitter")
  .match({
    some: v => v,
    none: v => `there is no account: ${v}`
  }); // @yayoc_
.getOrElse(value: any)

A public method to return T value when the instance contains some value. Otherwise, this function will return given value.

optionalUser
  .k("sns")
  .k("facebook")
  .k("url")
  .getOrElse("https://facebook.com"); // https://facebook.com

Credits

This library is highly inspired by lens.ts @utatti created.

License

MIT

FAQs

Package last updated on 16 Sep 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc