Uecko_ERP/apps/server/src/common/helpers/maybe.ts

39 lines
771 B
TypeScript
Raw Normal View History

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-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();
}
}