Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
August 20, 2021 10:59 am GMT

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:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To