Error Handling
Every module in viem exports an accompanying error type which you can use to strongly type your catch statements.
These types come in the form of <Module>ErrorType. For example, the getBlockNumber action exports a GetBlockNumberErrorType type.
Unfortunately, TypeScript doesn't have an abstraction for typed exceptions, so the most pragmatic & vanilla approach would be to explicitly cast error types in the catch statement.
example.ts
import { type GetBlockNumberErrorType } from 'viem'
import { client } from './client'
 
try {
  const blockNumber = await client.getBlockNumber()
} catch (e) {
  const error = e as GetBlockNumberErrorType
  error.name: "Error" | "ChainDisconnectedError" | "HttpRequestError" | "InternalRpcError" | "InvalidInputRpcError" | "InvalidParamsRpcError" | "InvalidRequestRpcError" | "JsonRpcVersionUnsupportedError" | ... 16 more ... | "WebSocketRequestError"name 
 
 
 
 
 
 
  if (error.name === 'InternalRpcError')
    error.code: -32603code
 
 
  if (error.name === 'HttpRequestError') {
    error.HttpRequestError.headers?: Headers | undefinedheaders
 
 
    error.HttpRequestError.status?: number | undefinedstatus
  }
}
