Hardhat部署合约报TS2345:value不存在于Overrides类型如何解决?
错误原因
- 你的WavePortal合约构造函数未添加
payable修饰符:Solidity规定只有带payable标记的函数(包含构造函数)才能接收ETH转入。你在部署时传入value参数尝试给合约转0.1ETH,但构造函数本身不支持收ETH,TypeScript的类型校验会直接拦截该非法操作,抛出你看到的类型不匹配报错。 - 若你使用的是ethers v6版本,旧版本的传参、工具函数调用方式也会触发同类报错,你可以先检查合约构造函数的修饰符问题。
解决步骤
- 修改Solidity合约的构造函数,添加
payable修饰符
// 调整后的构造函数 constructor() payable { console.log("Hello, Multiverse... I am Smart Contract WavePortal"); }
- 重新编译合约,更新类型定义文件
npx hardhat compile
- 重新执行部署脚本即可
npx hardhat run scripts/run.ts
额外兼容方案(仅针对ethers v6版本)
如果完成上述操作后仍报错,说明你使用的是ethers v6版本,需要调整部署代码的写法:
const waveContractFactory = await hre.ethers.getContractFactory("WavePortal"); // ethers v6中移除了utils层级,parseEther直接挂在ethers对象下 const waveContract = await waveContractFactory.deploy({ value: hre.ethers.parseEther("0.1"), });
内容的提问来源于stack exchange,提问作者Ezehlivinus
相关产品推荐
相关产品推荐

