错误处理
viem中的每个模块都会导出一个附带的错误类型,你可以使用它来强类型化catch
语句。
这些类型来自<Module>ErrorType
,例如getBlockNumber
方法导出一个GetBlockNumberErrorType
类型。
不幸的是,TypeScript没有针对类型异常的抽象,因此最实际和基本的方法是在catch语句中明确地进行错误类型转换。
ts
import { type GetBlockNumberErrorType } from 'viem'
import { publicClient } from './client'
try {
const blockNumber = await client.getBlockNumber()
} 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 } from 'viem'
import { publicClient } from './client'
try {
const blockNumber = await client.getBlockNumber()
} 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 { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'
export const publicClient = createPublicClient({
chain: mainnet,
transport: http()
})
import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'
export const publicClient = createPublicClient({
chain: mainnet,
transport: http()
})