说明 ABI 声明方式对类型推断的影响、human-readable ABI 的使用场景,以及类型安全的边界。
题目
团队里有人直接粘贴 ABI JSON,有人用 human-readable ABI。接入后 functionName 与 args 没有类型提示,参数写错要等运行时才报错。请说明如何获得类型推断,以及类型安全能覆盖到哪里。
考察目标
ABI 声明方式与类型推断的关系。
human-readable ABI 的使用场景。
编译期类型与运行时校验的边界。
查看参考答案包含简要回答、深入分析、常见错误与评分标准+
30 秒回答
把 ABI 声明为常量(as const)或使用 viem 的 parseAbi,可以让 functionName、args 与返回类型获得推断与编译期校验;human-readable ABI 适合手写小片段,生产项目更适合由工具从源码或部署信息生成 ABI。类型检查覆盖的是调用形状,链上返回值仍需要按 ABI 解码并处理异常。实现差异与工程取舍见深入回答。
深入回答
【实现行为】wagmi 的类型推断依赖 ABI 以常量形式声明,文档示例使用 as const(依据:wagmi TypeScript 页面 §Const-Assert ABIs & Typed Data)。
【实现行为】viem 的 parseAbi 接受 human-readable ABI 片段并返回可被类型系统识别的 ABI(依据:viem parseAbi §Usage)。