Skip to main content
Version: 1.x

Class: Optional<T>

Type parameters

Name
T

Hierarchy

Constructors

constructor

new Optional<T>()

Type parameters

Name
T

Methods

asJSON

Abstract asJSON(): null | T

Serialize a value using designed's preferred #asJSON method

Returns

null | T

Defined in

packages/optional/src/Optional.ts:304


call

call<K>(key, ...args): OptionalOf<ReturnType<T[K] extends (...args: any[]) => any ? any[any] : never>>

Invoke a method on the wrapped object and return an optional of the return value

Type parameters

NameType
Kextends string | number | symbol

Parameters

NameType
keyK
...argsParameters<T[K] extends (...args: any[]) => any ? any[any] : never>[]

Returns

OptionalOf<ReturnType<T[K] extends (...args: any[]) => any ? any[any] : never>>

Defined in

packages/optional/src/Optional.ts:194


callAsync

callAsync<K>(key, ...args): AsyncOptionalOf<ReturnType<T[K] extends (...args: any[]) => any ? any[any] : never>>

Invoke a method on the wrapped object and return an Async Optional of the return value

Type parameters

NameType
Kextends string | number | symbol

Parameters

NameType
keyK
...argsParameters<T[K] extends (...args: any[]) => Promise<any> ? any[any] : never>[]

Returns

AsyncOptionalOf<ReturnType<T[K] extends (...args: any[]) => any ? any[any] : never>>

Defined in

packages/optional/src/Optional.ts:206


defaultGet

defaultGet<X>(method): MaybePresentOptionalOf<T> | MaybePresentOptionalOf<X>

Inject a default value to the optional if it is absent to allow continued chaining

Type parameters

Name
X

Parameters

NameType
method() => X

Returns

MaybePresentOptionalOf<T> | MaybePresentOptionalOf<X>

Defined in

packages/optional/src/Optional.ts:229


defaultGetAsync

defaultGetAsync<X>(method): AsyncOptionalOf<T | X>

Inject a default value to the optional if it is absent to allow continued

Type parameters

Name
X

Parameters

NameType
method() => Promise<X>

Returns

AsyncOptionalOf<T | X>

Defined in

packages/optional/src/Optional.ts:240


defaultGetFlat

defaultGetFlat<X>(method): OptionalOf<T | X>

Type parameters

Name
X

Parameters

NameType
method() => Optional<X>

Returns

OptionalOf<T | X>

Defined in

packages/optional/src/Optional.ts:232


defaultGetFlatAsync

defaultGetFlatAsync<X>(method): AsyncOptionalOf<T | X>

Type parameters

Name
X

Parameters

NameType
method() => AsyncOptional<X>

Returns

AsyncOptionalOf<T | X>

Defined in

packages/optional/src/Optional.ts:246


defaultTo

defaultTo<X>(value): MaybePresentOptionalOf<T> | MaybePresentOptionalOf<X>

Inject a default value to the optional if it is absent to allow continued chaining

Type parameters

Name
X

Parameters

NameType
valueX

Returns

MaybePresentOptionalOf<T> | MaybePresentOptionalOf<X>

Defined in

packages/optional/src/Optional.ts:221


filter

Abstract filter<X>(predicate): Optional<X>

Example

Will remove a value that does not satisfy the predicate.

ts
Optional.of(5).filter(n => n > 5) // AbsentOptional<number>
Optional.of(5).filter(n => n === 5) // PresentOptional<number>

Type parameters

Name
X

Parameters

NameType
predicate(value: T) => value is X

Returns

Optional<X>

Defined in

packages/optional/src/Optional.ts:105

Abstract filter(predicate): Optional<T>

Parameters

NameType
predicate(value: T) => boolean

Returns

Optional<T>

Defined in

packages/optional/src/Optional.ts:106


filterNot

Abstract filterNot<X>(predicate): Optional<Exclude<T, X>>

Type parameters

Name
X

Parameters

NameType
predicate(value: T) => value is X

Returns

Optional<Exclude<T, X>>

Defined in

packages/optional/src/Optional.ts:108

Abstract filterNot(predicate): Optional<T>

Parameters

NameType
predicate(value: T) => boolean

Returns

Optional<T>

Defined in

packages/optional/src/Optional.ts:111


flatMap

Abstract flatMap<X>(transform): Optional<X>

Remark

Apply a transform to the value of the optional and return a new optional of its value. This means you can take a function that returns another function and it will "collapse" the optional

Example

ts
Optional.of('Hello').map(s => s.toUpperCase()) // Optional<"HELLO">
Optional.of(null).map(s => s.toUpperCase()) // AbsentOptional<string>

Type parameters

Name
X

Parameters

NameType
transform(value: T) => Optional<X>

Returns

Optional<X>

Defined in

packages/optional/src/Optional.ts:163


flatMapAsync

Abstract flatMapAsync<X>(transform): AsyncOptional<X>

Type parameters

Name
X

Parameters

NameType
transform(value: T) => AsyncOptional<X> | Promise<Optional<X>>

Returns

AsyncOptional<X>

Defined in

packages/optional/src/Optional.ts:164


get

Abstract get(): T

Example

ts
Optional.of(5).get() // 5
Optional.of(5).get() // throw TypeError

Returns

T

Defined in

packages/optional/src/Optional.ts:291


instanceOf

instanceOf<C>(...klasses): Optional<InstanceType<C[number]>>

Type parameters

NameType
Cextends (...args: any[]) => any[]

Parameters

NameType
...klassesC

Returns

Optional<InstanceType<C[number]>>

Defined in

packages/optional/src/Optional.ts:113


isAbsent

Abstract isAbsent(): this is AbsentOptional<T>

Example

Used in an if statement, will guarantee the type of the optional as either present or absent

ts
if (maybeUser.isAbsent()) {
maybeUser; // Instance of AbsentOptional<User>
}

Returns

this is AbsentOptional<T>

Defined in

packages/optional/src/Optional.ts:94


isPresent

Abstract isPresent(): this is PresentOptional<T>

Example

Used in an if statement, will guarantee the type of the optional as either present or absent

ts
if (maybeUser.isPresent()) {
maybeUser; // Instance of PresentOptional<User>
}

Returns

this is PresentOptional<T>

Defined in

packages/optional/src/Optional.ts:82


map

Abstract map<X>(transform): OptionalOf<X>

Remark

Apply a transform to the value of the optional and return a new optional of the result. This will not allow the return value to be nullable.

Example

ts
Optional.of('Hello').map(s => s.toUpperCase()) // Optional<"HELLO">
Optional.of(null).map(s => s.toUpperCase()) // AbsentOptional<string>

Type parameters

Name
X

Parameters

NameType
transform(value: T) => X

Returns

OptionalOf<X>

Defined in

packages/optional/src/Optional.ts:133


mapAsync

Abstract mapAsync<X>(transform): AsyncOptionalOf<X>

Type parameters

Name
X

Parameters

NameType
transform(value: T) => Promise<X>

Returns

AsyncOptionalOf<X>

Defined in

packages/optional/src/Optional.ts:134


orElse

Abstract orElse<X>(other): T | X

Example

ts
Optional.of(5).orElse('not there') // 5 (typeof string | number)
Optional.empty().orElse('not there') // 'not there' (typeof string | number)

Type parameters

Name
X

Parameters

NameType
otherX

Returns

T | X

Defined in

packages/optional/src/Optional.ts:260


orGet

Abstract orGet<X>(supplier): T | X

Example

Use a getter function to return a new value

ts
Optional.of(5).orGet(() => 'not there') // 5 (typeof string | number)

Type parameters

Name
X

Parameters

NameType
supplier() => X

Returns

T | X

Defined in

packages/optional/src/Optional.ts:270


orThrow

Abstract orThrow(errThrower): T

Remark

This must throw an exception when the method is invoked or the optional itself will throw a TypeError.

Example

ts
Optional.of(5).orThrow(() => { throw new Error('I am thrown'); })
Optional.of(5).orThrow(() => new Error('I am thrown'))

Parameters

NameType
errThrower() => Error

Returns

T

Defined in

packages/optional/src/Optional.ts:282


pick

pick<K>(key): OptionalOf<T[K]>

Select a field from the wrapped object and return an optional of that field.

Example

ts
Optional.of({name: 'Hello'}).select('name') // Optional<"Hello">

Type parameters

NameType
Kextends string | number | symbol

Parameters

NameType
keyK

Returns

OptionalOf<T[K]>

Defined in

packages/optional/src/Optional.ts:187


tap

tap(view): Optional<T>

Parameters

NameType
view(value: T) => unknown

Returns

Optional<T>

Defined in

packages/optional/src/Optional.ts:136


tapAsync

tapAsync(view): AsyncOptional<T>

Parameters

NameType
view(value: T) => Promise<unknown>

Returns

AsyncOptional<T>

Defined in

packages/optional/src/Optional.ts:143


toArray

Abstract toArray(): T[]

Returns

T[]

Defined in

packages/optional/src/Optional.ts:299


toJSON

Abstract toJSON(): null | T

Remark

Used with other libraries to allow serialization to JSON without coercing to a string

Returns

null | T

Defined in

packages/optional/src/Optional.ts:297


unzip

Abstract unzip<V>(this): OptionalizeArray<OptionalValue<V>>

Type parameters

NameType
Vextends Optional<[any, any], V>

Parameters

NameType
thisV

Returns

OptionalizeArray<OptionalValue<V>>

Defined in

packages/optional/src/Optional.ts:171


unzip3

Abstract unzip3<V>(this): OptionalizeArray<OptionalValue<V>>

Type parameters

NameType
Vextends Optional<[any, any, any], V>

Parameters

NameType
thisV

Returns

OptionalizeArray<OptionalValue<V>>

Defined in

packages/optional/src/Optional.ts:174


zip

Abstract zip<X>(...others): Optional<OptionalValuesFromTuple<[Optional<T>, ...X[]]>>

Type parameters

NameType
Xextends Optional<any>[]

Parameters

NameType
...othersX

Returns

Optional<OptionalValuesFromTuple<[Optional<T>, ...X[]]>>

Defined in

packages/optional/src/Optional.ts:168


empty

Static empty<T>(): Optional<T>

Remark

Create an empty optional to model a failure case

Type parameters

NameType
Tunknown

Returns

Optional<T>

Defined in

packages/optional/src/Optional.ts:68


fromJSON

Static fromJSON<T>(data): Optional<T>

Remark

Used for compatibility with other parts of this library that utilize fromJSON/asJSON/toJSON to manage serialization. This is logically the same as Optional.of

Example

ts
Optional.fromJSON(null)
Optional.fromJSON('Hello')

Type parameters

NameType
Tany

Parameters

NameType
dataT

Returns

Optional<T>

Defined in

packages/optional/src/Optional.ts:62


of

Static of<T>(value): OptionalOf<T>

Example

Create an optional from a nullable value. This will remove the types null or undefined using value != null.

ts
Optional.of('Hello') // Optional<string>
Optional.of<string>(null) // Optional<string>

Type parameters

Name
T

Parameters

NameType
valueT | Optional<NonNullable<T>>

Returns

OptionalOf<T>

Defined in

packages/optional/src/Optional.ts:43