Skip to content

Commit 75df472

Browse files
committed
feat: support new keyword
1 parent 396d017 commit 75df472

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

src/try.ts

+17-5
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,7 @@ class Failure<A> implements ITry<A> {
8383
export type Try<A> = Success<A> | Failure<A>;
8484
export type Unwrapped<A> = A extends Try<infer B> ? Unwrapped<B> : A;
8585

86-
export function Try<A>(value: () => A): Try<A> {
87-
return Try.apply(value);
88-
}
89-
90-
export namespace Try {
86+
export namespace TryImplementation {
9187
export function apply<A>(value: () => A): Try<A> {
9288
try {
9389
return new Success<A>(value());
@@ -124,6 +120,22 @@ export namespace Try {
124120
}
125121
}
126122

123+
export interface TryConstructor {
124+
<A>(value: () => A): Try<A>;
125+
new <A>(value: () => A): Try<A>;
126+
127+
apply<A>(value: () => A): Try<A>;
128+
success<A>(value: A | Try<A>): Try<Unwrapped<A>>;
129+
failure<A = never>(reason: unknown): Try<A>;
130+
isOk(value: unknown): value is Success<unknown>;
131+
isError(value: unknown): value is Failure<unknown>;
132+
isTry(value: unknown): value is Try<unknown>;
133+
}
134+
135+
export const Try = Object.assign(function <A>(value: () => A): Try<A> {
136+
return TryImplementation.apply(value);
137+
}, TryImplementation satisfies Omit<TryConstructor, never>) as TryConstructor;
138+
127139
/* Result Types */
128140
type ResultOk<T> = {
129141
ok: true;

0 commit comments

Comments
 (0)