乐闻世界logo
搜索文章和话题

Hardhat 如何支持 TypeScript 和类型安全?

2月21日 15:59

Hardhat 对 TypeScript 提供了原生支持,以下是使用 TypeScript 的主要优势和方法:

1. 项目初始化

使用 TypeScript 模板创建项目:

bash
npx hardhat init # 选择 "Create a TypeScript project"

2. 类型安全的合约交互

Hardhat 自动生成类型定义:

typescript
import { 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 生成类型定义:

bash
npm install --save-dev typechain @typechain/ethers-v5

在 hardhat.config.ts 中配置:

typescript
import "@typechain/hardhat";

生成的类型定义:

typescript
import { MyContract } from "../typechain-types"; const contract: MyContract = await contractFactory.deploy();

4. 测试中的类型安全

typescript
import { 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

typescript
import { 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; } }

优势:

  • 编译时类型检查
  • 智能代码补全
  • 重构更安全
  • 减少运行时错误
  • 更好的代码文档
  • 团队协作更高效
标签:Hardhat