@@ -611,6 +611,15 @@ describe("Result", () => {
611
611
} ) ;
612
612
613
613
describe ( "instance methods and getters" , ( ) => {
614
+ describe ( "$inferValue / $inferError" , ( ) => {
615
+ it ( "infers the value and error type of a result" , ( ) => {
616
+ const result : Result < number , ErrorA > = Result . ok ( 42 ) ;
617
+
618
+ expectTypeOf ( result . $inferValue ) . toEqualTypeOf < number > ( ) ;
619
+ expectTypeOf ( result . $inferError ) . toEqualTypeOf < ErrorA > ( ) ;
620
+ } ) ;
621
+ } ) ;
622
+
614
623
describe ( "value" , ( ) => {
615
624
it ( "returns the encapsulated value on success" , ( ) => {
616
625
const result : Result < number , ErrorA > = Result . ok ( 42 ) ;
@@ -723,6 +732,56 @@ describe("Result", () => {
723
732
} ) ;
724
733
} ) ;
725
734
735
+ describe ( "toTuple" , ( ) => {
736
+ it ( "returns a tuple on a successful result" , ( ) => {
737
+ const result : Result < number , ErrorA > = Result . ok ( 2 ) ;
738
+
739
+ const [ value , error ] = result . toTuple ( ) ;
740
+ if ( error ) {
741
+ expectTypeOf ( error ) . toEqualTypeOf < ErrorA > ( ) ;
742
+ } else {
743
+ expectTypeOf ( value ) . toEqualTypeOf < number > ( ) ;
744
+ }
745
+
746
+ expect ( value ) . toBe ( 2 ) ;
747
+ expect ( error ) . toBeNull ( ) ;
748
+ } ) ;
749
+
750
+ it ( "returns a tuple on a failed result" , ( ) => {
751
+ const result : Result < number , ErrorA > = Result . error ( errorA ) ;
752
+
753
+ const [ value , error ] = result . toTuple ( ) ;
754
+ if ( error ) {
755
+ expectTypeOf ( error ) . toEqualTypeOf < ErrorA > ( ) ;
756
+ } else {
757
+ expectTypeOf ( value ) . toEqualTypeOf < number > ( ) ;
758
+ }
759
+
760
+ expect ( value ) . toBeNull ( ) ;
761
+ expect ( error ) . toBe ( errorA ) ;
762
+ } ) ;
763
+
764
+ it ( "handles cases where the result can only be successful" , ( ) => {
765
+ const result = Result . ok ( 12 ) ;
766
+
767
+ const [ value , error ] = result . toTuple ( ) ;
768
+ expectTypeOf ( value ) . toEqualTypeOf < number > ( ) ;
769
+ expectTypeOf ( error ) . toEqualTypeOf < never > ( ) ;
770
+ expect ( value ) . toBe ( 12 ) ;
771
+ expect ( error ) . toBe ( null ) ;
772
+ } ) ;
773
+
774
+ it ( "handles cases where the result can only be a failure" , ( ) => {
775
+ const result = Result . error ( errorA ) ;
776
+
777
+ const [ value , error ] = result . toTuple ( ) ;
778
+ expectTypeOf ( value ) . toEqualTypeOf < never > ( ) ;
779
+ expectTypeOf ( error ) . toEqualTypeOf < ErrorA > ( ) ;
780
+ expect ( value ) . toBe ( null ) ;
781
+ expect ( error ) . toBe ( errorA ) ;
782
+ } ) ;
783
+ } ) ;
784
+
726
785
describe ( "errorOrNull" , ( ) => {
727
786
it ( "returns the error on failure" , ( ) => {
728
787
const result : Result < number , CustomError > = Result . error (
@@ -1605,13 +1664,72 @@ describe("AsyncResult", () => {
1605
1664
} ) ;
1606
1665
1607
1666
describe ( "instance methods and getters" , ( ) => {
1667
+ describe ( "$inferValue / $inferError" , ( ) => {
1668
+ it ( "infers the value and error type of a result" , ( ) => {
1669
+ const result : AsyncResult < number , ErrorA > = AsyncResult . ok ( 42 ) ;
1670
+
1671
+ expectTypeOf ( result . $inferValue ) . toEqualTypeOf < number > ( ) ;
1672
+ expectTypeOf ( result . $inferError ) . toEqualTypeOf < ErrorA > ( ) ;
1673
+ } ) ;
1674
+ } ) ;
1675
+
1608
1676
describe ( "isAsyncResult" , ( ) => {
1609
1677
it ( "tests whether a value is an async-result" , ( ) => {
1610
1678
const asyncResult = AsyncResult . ok ( 12 ) ;
1611
1679
expect ( asyncResult . isAsyncResult ) . toBe ( true ) ;
1612
1680
} ) ;
1613
1681
} ) ;
1614
1682
1683
+ describe ( "toTuple" , ( ) => {
1684
+ it ( "returns a tuple on a successful result" , async ( ) => {
1685
+ const result : AsyncResult < number , ErrorA > = AsyncResult . ok ( 2 ) ;
1686
+
1687
+ const [ value , error ] = await result . toTuple ( ) ;
1688
+ if ( error ) {
1689
+ expectTypeOf ( error ) . toEqualTypeOf < ErrorA > ( ) ;
1690
+ } else {
1691
+ expectTypeOf ( value ) . toEqualTypeOf < number > ( ) ;
1692
+ }
1693
+
1694
+ expect ( value ) . toBe ( 2 ) ;
1695
+ expect ( error ) . toBeNull ( ) ;
1696
+ } ) ;
1697
+
1698
+ it ( "returns a tuple on a failed result" , async ( ) => {
1699
+ const result : AsyncResult < number , ErrorA > = AsyncResult . error ( errorA ) ;
1700
+
1701
+ const [ value , error ] = await result . toTuple ( ) ;
1702
+ if ( error ) {
1703
+ expectTypeOf ( error ) . toEqualTypeOf < ErrorA > ( ) ;
1704
+ } else {
1705
+ expectTypeOf ( value ) . toEqualTypeOf < number > ( ) ;
1706
+ }
1707
+
1708
+ expect ( value ) . toBeNull ( ) ;
1709
+ expect ( error ) . toBe ( errorA ) ;
1710
+ } ) ;
1711
+
1712
+ it ( "handles cases where the result can only be successful" , async ( ) => {
1713
+ const result = AsyncResult . ok ( 12 ) ;
1714
+
1715
+ const [ value , error ] = await result . toTuple ( ) ;
1716
+ expectTypeOf ( value ) . toEqualTypeOf < number > ( ) ;
1717
+ expectTypeOf ( error ) . toEqualTypeOf < never > ( ) ;
1718
+ expect ( value ) . toBe ( 12 ) ;
1719
+ expect ( error ) . toBe ( null ) ;
1720
+ } ) ;
1721
+
1722
+ it ( "handles cases where the result can only be a failure" , async ( ) => {
1723
+ const result = AsyncResult . error ( errorA ) ;
1724
+
1725
+ const [ value , error ] = await result . toTuple ( ) ;
1726
+ expectTypeOf ( value ) . toEqualTypeOf < never > ( ) ;
1727
+ expectTypeOf ( error ) . toEqualTypeOf < ErrorA > ( ) ;
1728
+ expect ( value ) . toBe ( null ) ;
1729
+ expect ( error ) . toBe ( errorA ) ;
1730
+ } ) ;
1731
+ } ) ;
1732
+
1615
1733
describe ( "errorOrNull" , async ( ) => {
1616
1734
it ( "returns the error on failure" , async ( ) => {
1617
1735
const asyncResult = AsyncResult . error ( errorA ) as AsyncResult <
0 commit comments