Hardhat 对 TypeScript 提供了原生支持,以下是使用 TypeScript 的主要优势和方法:
1. 项目初始化
使用 TypeScript 模板创建项目:
bashnpx hardhat init # 选择 "Create a TypeScript project"
2. 类型安全的合约交互
Hardhat 自动生成类型定义:
typescriptimport { ethers } from "hardhat"; async function main() { const Contract = await ethers.getContractFactory("MyContract"); const contract = await Contract.deploy() as MyContract; // 类型安全的函数调用 await contract.setValue(42); const value = await contract.value(); console.log("Value:", value.toNumber()); }
3. 使用 TypeChain
TypeChain 为合约 ABI 生成类型定义:
bashnpm install --save-dev typechain @typechain/ethers-v5
在 hardhat.config.ts 中配置:
typescriptimport "@typechain/hardhat";
生成的类型定义:
typescriptimport { MyContract } from "../typechain-types"; const contract: MyContract = await contractFactory.deploy();
4. 测试中的类型安全
typescriptimport { expect } from "chai"; import { ethers } from "hardhat"; import { MyContract } from "../typechain-types"; describe("MyContract", function () { let contract: MyContract; beforeEach(async function () { const ContractFactory = await ethers.getContractFactory("MyContract"); contract = await ContractFactory.deploy(); await contract.deployed(); }); it("should set value correctly", async function () { await contract.setValue(100); expect(await contract.value()).to.equal(100); }); });
5. 配置文件类型安全
使用 TypeScript 配置文件 hardhat.config.ts:
typescriptimport { HardhatUserConfig } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox"; const config: HardhatUserConfig = { solidity: "0.8.19", networks: { sepolia: { url: process.env.SEPOLIA_RPC_URL || "", accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [] } } }; export default config;
6. 环境变量类型定义
typescript// .env.d.ts declare namespace NodeJS { interface ProcessEnv { SEPOLIA_RPC_URL: string; PRIVATE_KEY: string; ETHERSCAN_API_KEY: string; } }
优势:
- 编译时类型检查
- 智能代码补全
- 重构更安全
- 减少运行时错误
- 更好的代码文档
- 团队协作更高效