2025-02-20 18:55:24 +00:00
|
|
|
/**
|
|
|
|
|
* Uso:
|
|
|
|
|
*
|
|
|
|
|
* const maybeNumber = Maybe.Some(10);
|
|
|
|
|
* const doubled = maybeNumber.map(n => n * 2);
|
|
|
|
|
* console.log(doubled.getValue()); // 20
|
|
|
|
|
|
|
|
|
|
* const noValue = Maybe.None<number>();
|
|
|
|
|
* console.log(noValue.isSome()); // false
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
export class Maybe<T> {
|
|
|
|
|
private constructor(private readonly value?: T) {}
|
|
|
|
|
|
|
|
|
|
static Some<T>(value: T): Maybe<T> {
|
|
|
|
|
return new Maybe<T>(value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static None<T>(): Maybe<T> {
|
|
|
|
|
return new Maybe<T>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
isSome(): boolean {
|
|
|
|
|
return this.value !== undefined;
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-25 10:16:34 +00:00
|
|
|
isNone(): boolean {
|
|
|
|
|
return !this.isSome();
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-24 19:00:28 +00:00
|
|
|
unwrap(): T | undefined {
|
2025-02-20 18:55:24 +00:00
|
|
|
return this.value;
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-24 19:00:28 +00:00
|
|
|
getOrUndefined(): T | undefined {
|
|
|
|
|
return this.unwrap();
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-20 18:55:24 +00:00
|
|
|
map<U>(fn: (value: T) => U): Maybe<U> {
|
|
|
|
|
return this.isSome() ? Maybe.Some(fn(this.value as T)) : Maybe.None();
|
|
|
|
|
}
|
|
|
|
|
}
|