Error Handling
Every module in Wagmi Core 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.
tsx
import { type GetBlockNumberErrorType, getBlockNumber } from '@wagmi/core'
import { config } from './config'
try {
const blockNumber = await getBlockNumber(config)
} catch (e) {
const error = e as GetBlockNumberErrorType
error.name
// ^? (property) name: "Error" | "ChainDisconnectedError" | "HttpRequestError" | "InternalRpcError" | "InvalidInputRpcError" | "InvalidParamsRpcError" | "InvalidRequestRpcError" | "JsonRpcVersionUnsupportedError" | ... 16 more ... | "WebSocketRequestError"
if (error.name === 'InternalRpcError')
error.code
// ^? (property) code: -32603
if (error.name === 'HttpRequestError')
error.headers
// ^? (property) headers: Headers
error.status
// ^? (property) status: number
}
import { type GetBlockNumberErrorType, getBlockNumber } from '@wagmi/core'
import { config } from './config'
try {
const blockNumber = await getBlockNumber(config)
} catch (e) {
const error = e as GetBlockNumberErrorType
error.name
// ^? (property) name: "Error" | "ChainDisconnectedError" | "HttpRequestError" | "InternalRpcError" | "InvalidInputRpcError" | "InvalidParamsRpcError" | "InvalidRequestRpcError" | "JsonRpcVersionUnsupportedError" | ... 16 more ... | "WebSocketRequestError"
if (error.name === 'InternalRpcError')
error.code
// ^? (property) code: -32603
if (error.name === 'HttpRequestError')
error.headers
// ^? (property) headers: Headers
error.status
// ^? (property) status: number
}
ts
import { http, createConfig } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
import { http, createConfig } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
TIP
If you are using Wagmi Hooks, errors are already strongly typed via the error
property.