feat: add types for Ok/Err/Result/ResultPromise #132
Merged
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.
Tip
The owner of this PR can publish a preview release by commenting
/publish
in this PR. Afterwards, anyone can try it out by runningpnpm add radashi@pr<PR_NUMBER>
.Summary
Added Types
Ok<string>
→[undefined, string]
Ok<Promise<string>>
→[undefined, string]
Err
→[Error, undefined]
Err<unknown>
→[NonNullable<unknown>, undefined]
Err<Error | string>
→[Error | string, undefined]
Result<string>
→Ok<string> | Err
Result<string, TypeError>
→Ok<string> | Err<TypeError>
ResultPromise<string>
→Promise<Ok<string> | Err>
ResultPromise<string, TypeError>
→Promise<Ok<string> | Err<TypeError>>
The goal is to keep these types as straight-forward as possible.
Etymology
The
Ok<T>
andErr<E>
convention for representing success and error states in a type-safe manner originates from the Rust programming language. This pattern is known as the Result type in Rust.In Rust, the
Result<T, E>
enum is used to return and propagate errors. It has two variants:Ok(T)
: Represents a successful result, containing a value of type T.Err(E)
: Represents an error, containing an error value of type E.This pattern has been adopted by other languages and libraries due to its effectiveness in handling errors and optional values in a type-safe way. It's similar to the Either type in functional programming, where Left typically represents an error and Right represents a success value.
The
Ok<T>
andErr<E>
convention offers several benefits:This approach to error handling and optional values has gained popularity in various programming paradigms due to its clarity and safety advantages over traditional error handling mechanisms.
Related issue, if any:
Inspired by #131
For any code change,
Does this PR introduce a breaking change?
No