Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The current Result type is okay, but it doesn't actually leverage Typescript's ability to catch bugs at build time. This PR does a few things:
OkResult | ErrResult
unwrapOrThrow(err?: Error)
has been separated into two methods:unwrap()
this method ONLY exists on OkResult. In order to call it, you need to useisOk
orisErr
to do type narrowing so that TypeScript knows the method exists.unwrapOrThrow(err: Error)
This is a convenience method to throw an error if the result is an ErrResult. It is like the old version ofunwrapOrThrow
, except the argument is now required. This exists on BOTH OkResult and ErrResult.unwrapOrThrow()
with no arguments to useunwrap()
, and kept calls ofunwrapOrThrow(new Error('error message'))
with one argument to useunwrapOrThrow()
.unwrapErr()
this method ONLY exists on ErrResult. In order to call it, you need to useisOk
orisErr
to do type narrowing so that TypeScript knows the method exists.isOk
andisErr
are now type predicates which means they will do type narrowing. Once you callresult.isOk()
, typescript "grants you access" to calling theunwrap()
method.isOk
function (not an instance method on either of the result classes) because TypeScript doesn't understand when you.filter(r => r.isOk())
. It understandsfilter(isOk)
though.