An Interest In:
Web News this Week
- April 19, 2024
- April 18, 2024
- April 17, 2024
- April 16, 2024
- April 15, 2024
- April 14, 2024
- April 13, 2024
August 20, 2021 10:59 am GMT
Original Link: https://dev.to/karanpratapsingh/go-like-error-handling-in-typescript-4plm
Go like error handling in TypeScript
In this article we'll learn about how we can handle our errors like Go with TypeScript.
Note: In TypeScript this is probably not a "best practice", or even a good practice at all but let's have fun experimenting nonetheless!
Let's take the following as an example.
import * as fs from 'fs/promises';async function main(): Promise<void> { try { const result: Buffer = await fs.readFile('./package.json'); // Do something with result } catch (error) { // Handle error }}main();
In Go, this should look as below.
package mainimport "io/ioutil"func main() { data, err := ioutil.ReadFile("./package.json") if err != nil { // Handle error } // Do something with data}
Let's write our async
handler helper function! This function basically returns a Tuple of result and error as TypeScript doesn't have multiple returns.
type Maybe<T> = T | null;type AsyncResult = any;type AsyncError = any;type AsyncReturn<R, E> = [Maybe<R>, Maybe<E>];type AsyncFn = Promise<AsyncResult>;async function async<R = AsyncResult, E = AsyncError>( fn: AsyncFn): Promise<AsyncReturn<R, E>> { try { const data: R = await fn; return [data, null]; } catch (error) { return [null, error]; }}
We can use our async
utility as below. We can pass our Result and Error generics types.
import * as fs from 'fs/promises';async function main(): Promise<void> { const fn: Promise<Buffer> = fs.readFile('./package.json'); const [data, error] = await async<Buffer, NodeJS.ErrnoException>(fn); if (error) { // Handle error } // Do something with data}main();
Perfect! We now have isolated our try/catch
with Go like error handling pattern.
Original Link: https://dev.to/karanpratapsingh/go-like-error-handling-in-typescript-4plm
Share this article:
Tweet
View Full Article
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To