optional-chain
Advanced tools
Comparing version 0.1.1 to 0.1.2
@@ -5,3 +5,3 @@ export declare enum OptionType { | ||
} | ||
export declare const optional: <T>(value: T) => Option<T>; | ||
export declare const optional: <T>(value: T) => Option<Diff<T, null | undefined>>; | ||
export declare type Diff<T, U> = T extends U ? never : T; | ||
@@ -8,0 +8,0 @@ export declare type NonNullable<T> = Diff<T, null | undefined>; |
@@ -8,2 +8,3 @@ "use strict"; | ||
})(OptionType = exports.OptionType || (exports.OptionType = {})); | ||
// Use NonNullable type to avoid returning "never type" when accessing optional properties | ||
exports.optional = function (value) { | ||
@@ -47,2 +48,2 @@ return new Option(value); | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFZLFVBR1g7QUFIRCxXQUFZLFVBQVU7SUFDcEIsMkNBQUksQ0FBQTtJQUNKLDJDQUFJLENBQUE7QUFDTixDQUFDLEVBSFcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUFHckI7QUFFWSxRQUFBLFFBQVEsR0FBRyxVQUFJLEtBQVE7SUFDbEMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUM7QUFLRjtJQUdFLGdCQUFZLEtBQVE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7U0FDN0I7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztTQUM3QjtJQUNILENBQUM7SUFDTSxrQkFBQyxHQUFSLFVBQTRCLEdBQU07UUFDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDakMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQVEsQ0FBQztTQUNyQztRQUNELE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBUSxDQUFDO0lBQzVDLENBQUM7SUFNTSxvQkFBRyxHQUFWO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDTSxzQkFBSyxHQUFaLFVBQWEsRUFNWjtZQUxDLGNBQUksRUFDSixjQUFJO1FBS0osT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNNLDBCQUFTLEdBQWhCLFVBQWlCLEtBQVE7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM1RCxDQUFDO0lBQ0gsYUFBQztBQUFELENBQUMsQUFyQ0QsSUFxQ0M7QUFyQ1ksd0JBQU07QUF1Q25CLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFVBQVksS0FBYTtJQUM1QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxFQUFFO1FBQ25DLE9BQU8sSUFBSSxNQUFNLENBQUMsU0FBZ0IsQ0FBQyxDQUFDO0tBQ3JDO0lBQ0QsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDIn0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFZLFVBR1g7QUFIRCxXQUFZLFVBQVU7SUFDcEIsMkNBQUksQ0FBQTtJQUNKLDJDQUFJLENBQUE7QUFDTixDQUFDLEVBSFcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUFHckI7QUFFRCwwRkFBMEY7QUFDN0UsUUFBQSxRQUFRLEdBQUcsVUFBSSxLQUFRO0lBQ2xDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFRLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBS0Y7SUFHRSxnQkFBWSxLQUFRO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDbkQsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1NBQzdCO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBQ00sa0JBQUMsR0FBUixVQUE0QixHQUFNO1FBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFRLENBQUM7U0FDckM7UUFDRCxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQVEsQ0FBQztJQUM1QyxDQUFDO0lBTU0sb0JBQUcsR0FBVjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ00sc0JBQUssR0FBWixVQUFhLEVBTVo7WUFMQyxjQUFJLEVBQ0osY0FBSTtRQUtKLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDTSwwQkFBUyxHQUFoQixVQUFpQixLQUFRO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDNUQsQ0FBQztJQUNILGFBQUM7QUFBRCxDQUFDLEFBckNELElBcUNDO0FBckNZLHdCQUFNO0FBdUNuQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxVQUFZLEtBQWE7SUFDNUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsRUFBRTtRQUNuQyxPQUFPLElBQUksTUFBTSxDQUFDLFNBQWdCLENBQUMsQ0FBQztLQUNyQztJQUNELE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyJ9 |
@@ -21,1 +21,11 @@ import { optional } from "../../src"; | ||
.get(); | ||
type Foo = { | ||
bar?: { | ||
str: string; | ||
}; | ||
}; | ||
const foo: Foo = {}; | ||
const optionalFoo = optional(foo.bar); | ||
optionalFoo.k("str"); |
{ | ||
"name": "optional-chain", | ||
"version": "0.1.1", | ||
"version": "0.1.2", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -6,2 +6,6 @@ # optional-chain [![travis-ci](https://travis-ci.org/yayoc/optional-chain.svg?branch=master)](https://travis-ci.org/yayoc/optional-chain) | ||
## Requirement | ||
This library requires TS 2.8+ version to use [conditional type](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html) | ||
## Install | ||
@@ -18,3 +22,3 @@ | ||
type User { | ||
type User = { | ||
name?: { | ||
@@ -21,0 +25,0 @@ first: string |
@@ -6,4 +6,5 @@ export enum OptionType { | ||
export const optional = <T>(value: T): Option<T> => { | ||
return new Option(value); | ||
// Use NonNullable type to avoid returning "never type" when accessing optional properties | ||
export const optional = <T>(value: T): Option<NonNullable<T>> => { | ||
return new Option(value) as any; | ||
}; | ||
@@ -10,0 +11,0 @@ |
22989
445
132