File tree 2 files changed +42
-0
lines changed
2 files changed +42
-0
lines changed Original file line number Diff line number Diff line change
1
+ export { Maybe } from './maybe'
Original file line number Diff line number Diff line change
1
+ // tslint:disable:no-this
2
+ // tslint:disable-next-line:no-class
3
+ export class Maybe < T > {
4
+ private constructor ( private value ?: T ) { }
5
+
6
+ static some < T > ( value : T ) {
7
+ // tslint:disable-next-line:no-if-statement
8
+ if ( ! value ) {
9
+ throw Error ( 'Provided value must not be empty' )
10
+ }
11
+ return new Maybe ( value )
12
+ }
13
+
14
+ static none < T > ( ) {
15
+ return new Maybe < T > ( undefined )
16
+ }
17
+
18
+ static fromValue < T > ( value : T ) {
19
+ return value
20
+ ? Maybe . some < NonNullable < T > > ( value as NonNullable < T > )
21
+ : Maybe . none < NonNullable < T > > ( )
22
+ }
23
+
24
+ getOrElse ( defaultValue : T ) {
25
+ return this . value === undefined ? defaultValue : this . value
26
+ }
27
+
28
+ map < R > ( f : ( wrapped : T ) => R ) : Maybe < R > {
29
+ return this . value === undefined
30
+ ? Maybe . none < R > ( )
31
+ : Maybe . some ( f ( this . value ) )
32
+ }
33
+
34
+ doIfSome < R > ( f : ( wrapped : T ) => R ) : void {
35
+ this . value && f ( this . value )
36
+ }
37
+
38
+ flattenMap < R > ( f : ( wrapped : T ) => Maybe < R > ) : Maybe < R > {
39
+ return this . value === undefined ? Maybe . none < R > ( ) : f ( this . value )
40
+ }
41
+ }
You can’t perform that action at this time.
0 commit comments