Skip to content

Commit ff30c92

Browse files
committed
fix: interop typings
1 parent 62e10cc commit ff30c92

2 files changed

Lines changed: 25 additions & 10 deletions

File tree

src/interop.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
import { Try } from "./try";
22

33
export function toPromise<T>(value: Try<T>): Promise<T> {
4-
return value
5-
.then((x) => Promise.resolve(x))
6-
.catch((x) => Promise.reject(x))
7-
.unwrap();
4+
return new Promise((resolve, reject) => value.then(resolve).catch(reject));
85
}

src/try.ts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
interface ITry<A> {
22
ok: boolean;
33

4-
then<B = A>(onsuccess: (value: A) => B | Try<B>): Try<B>;
5-
catch<B = never>(onfailure: (reason: unknown) => B | Try<B>): Try<A | B>;
4+
then<B = A>(onsuccess: ((value: A) => B | Try<B>) | undefined | null): Try<B>;
5+
catch<B = never>(
6+
onfailure: ((reason: unknown) => B | Try<B>) | undefined | null
7+
): Try<A | B>;
68
finally(onfinally?: (() => void) | undefined | null): Try<A>;
79

810
unwrap(): A;
@@ -22,7 +24,13 @@ export class Success<A> implements ITry<A> {
2224
return "Try";
2325
}
2426

25-
then<B = A>(onsuccess: (value: A) => B | Try<B>): Try<B> {
27+
then<B = A>(
28+
onsuccess: ((value: A) => B | Try<B>) | undefined | null
29+
): Try<B> {
30+
if (onsuccess === undefined || onsuccess === null) {
31+
return this as unknown as Try<B>;
32+
}
33+
2634
try {
2735
const next = onsuccess(this.value);
2836
if (Try.isTry(next)) {
@@ -35,7 +43,9 @@ export class Success<A> implements ITry<A> {
3543
}
3644
}
3745

38-
catch<B = never>(onfailure: (reason: unknown) => B | Try<B>): Try<A | B> {
46+
catch<B = never>(
47+
onfailure: ((reason: unknown) => B | Try<B>) | undefined | null
48+
): Try<A | B> {
3949
return this as unknown as Try<A | B>;
4050
}
4151

@@ -70,11 +80,19 @@ export class Failure<A> implements ITry<A> {
7080
return "Try";
7181
}
7282

73-
then<B = A>(onsuccess: (value: A) => B | Try<B>): Try<B> {
83+
then<B = A>(
84+
onsuccess: ((value: A) => B | Try<B>) | undefined | null
85+
): Try<B> {
7486
return this as unknown as Try<B>;
7587
}
7688

77-
catch<B = never>(onfailure: (reason: unknown) => B | Try<B>): Try<A | B> {
89+
catch<B = never>(
90+
onfailure: ((reason: unknown) => B | Try<B>) | undefined | null
91+
): Try<A | B> {
92+
if (onfailure === undefined || onfailure === null) {
93+
return this as unknown as Try<A | B>;
94+
}
95+
7896
try {
7997
const next = onfailure(this.error);
8098
if (Try.isTry(next)) {

0 commit comments

Comments
 (0)