@@ -2465,9 +2465,6 @@ describe("Result", () => {
2465
2465
return 12 ;
2466
2466
} ) ;
2467
2467
expect ( recoveredResult ) . toBeInstanceOf ( AsyncResult ) ;
2468
- expectTypeOf ( recoveredResult ) . toEqualTypeOf <
2469
- AsyncResult < number , Error >
2470
- > ( ) ;
2471
2468
Result . assertOk ( await recoveredResult ) ;
2472
2469
expect ( spy ) . not . toHaveBeenCalled ( ) ;
2473
2470
} ) ;
@@ -2628,6 +2625,60 @@ describe("Result", () => {
2628
2625
expectTypeOf ( resultB . value ) . toBeNumber ( ) ;
2629
2626
expectTypeOf ( resultB . error ) . toBeUndefined ( ) ;
2630
2627
} ) ;
2628
+
2629
+ it ( "should disregard any mapped values after a result can only be a failure" , ( ) => {
2630
+ const syncFailure = Result . error ( new ErrorA ( ) ) ;
2631
+ const asyncFailure = AsyncResult . error ( new ErrorA ( ) ) ;
2632
+
2633
+ const resultA = syncFailure . map ( ( value ) => {
2634
+ expectTypeOf ( value ) . toEqualTypeOf < never > ( ) ;
2635
+ return Result . ok ( 12 ) ;
2636
+ } ) ;
2637
+ expectTypeOf ( resultA ) . toEqualTypeOf < Result < never , ErrorA > > ( ) ;
2638
+
2639
+ const resultB = syncFailure . map ( async ( ) => Result . ok ( 12 ) ) ;
2640
+ // It should disregard the async mapping as well
2641
+ expectTypeOf ( resultB ) . toEqualTypeOf < Result < never , ErrorA > > ( ) ;
2642
+
2643
+ const resultC = syncFailure . mapCatching ( ( ) => Result . ok ( 12 ) ) ;
2644
+ expectTypeOf ( resultC ) . toEqualTypeOf < Result < never , ErrorA > > ( ) ;
2645
+
2646
+ const resultD = asyncFailure . map ( ( value ) => {
2647
+ expectTypeOf ( value ) . toEqualTypeOf < never > ( ) ;
2648
+ return Result . ok ( 12 ) ;
2649
+ } ) ;
2650
+ expectTypeOf ( resultD ) . toEqualTypeOf < AsyncResult < never , ErrorA > > ( ) ;
2651
+
2652
+ const resultE = asyncFailure . mapCatching ( ( value ) => {
2653
+ expectTypeOf ( value ) . toEqualTypeOf < never > ( ) ;
2654
+ return Result . ok ( 12 ) ;
2655
+ } ) ;
2656
+ expectTypeOf ( resultE ) . toEqualTypeOf < AsyncResult < never , ErrorA > > ( ) ;
2657
+ } ) ;
2658
+
2659
+ it ( "should disregard any recovered errors after a result can only be a success" , ( ) => {
2660
+ const syncSuccess = Result . ok ( 12 ) ;
2661
+ const asyncSuccess = AsyncResult . ok ( 12 ) ;
2662
+
2663
+ const resultA = syncSuccess . recover ( ( ) => Result . error ( new ErrorA ( ) ) ) ;
2664
+ expectTypeOf ( resultA ) . toEqualTypeOf < Result < number , never > > ( ) ;
2665
+
2666
+ const resultB = syncSuccess . recover ( async ( ) => Result . error ( new ErrorA ( ) ) ) ;
2667
+ expectTypeOf ( resultB ) . toEqualTypeOf < Result < number , never > > ( ) ;
2668
+
2669
+ const resultC = syncSuccess . recoverCatching ( ( ) =>
2670
+ Result . error ( new ErrorA ( ) ) ,
2671
+ ) ;
2672
+ expectTypeOf ( resultC ) . toEqualTypeOf < Result < number , never > > ( ) ;
2673
+
2674
+ const resultD = asyncSuccess . recover ( ( ) => Result . error ( new ErrorA ( ) ) ) ;
2675
+ expectTypeOf ( resultD ) . toEqualTypeOf < AsyncResult < number , never > > ( ) ;
2676
+
2677
+ const resultE = asyncSuccess . recoverCatching ( ( ) =>
2678
+ Result . error ( new ErrorA ( ) ) ,
2679
+ ) ;
2680
+ expectTypeOf ( resultE ) . toEqualTypeOf < AsyncResult < number , never > > ( ) ;
2681
+ } ) ;
2631
2682
} ) ;
2632
2683
2633
2684
describe ( "AsyncResult" , ( ) => {
0 commit comments