grpc-node icon indicating copy to clipboard operation
grpc-node copied to clipboard

[Suggestion] provide error types

Open davidbnk opened this issue 3 years ago • 0 comments

Is your feature request related to a problem? Please describe.

Provide error types for dealing and identifing errors. If you promisify the methods and are working with async/await + try/catch, typescript mark errors as unknown.

Describe the solution you'd like

Something like this:

interface Metadata {
  get: (key: string) => string[];
}
export interface GRPCError {
  message: string;
  code: number;
  details: string;
  metadata: Metadata;
}

export function isGRPCError(err: unknown): err is GRPCError {
  let e = err as GRPCError;
  return (
    typeof e.message === "string" &&
    typeof e.code === "number" &&
    typeof e.details === "string" &&
    typeof e.metadata === "object" &&
    typeof e.metadata.get === "function"
  );
}
import { GRPCClient, isGRPCError } from "src";

(async () => {
  try {
    let resp = await GRPCClient.myMethod();
  } catch (err) { // err is unknown
    if (isGRPCError(err)) {
      console.error("error reason:", err.metadata.get("reason"));
    }
  }
})();

davidbnk avatar Nov 07 '22 00:11 davidbnk