TypeScript中Web3类型声明报错,如何正确定义Web3实例类型?
Web3实例变量的正确类型定义方式
问题原因
用const Web3 = require('web3')导入的是Web3构造函数的值,TypeScript不允许直接将值当作类型使用;而typeof Web3获取的是构造函数本身的类型,并非实例类型,所以会得到Object类型,不符合需求。
解决方案1:改用ES模块导入(推荐)
通过ES模块的import导入Web3,TypeScript会自动识别其类类型,直接用Web3作为实例类型即可:
import Web3 from 'web3'; import { Chains } from "./Chains" export class Web3Provider { provider: Web3; constructor(endpoint: string) { this.provider = new Web3(endpoint); } }
解决方案2:保留require导入,用InstanceType获取实例类型
如果必须使用require导入,可通过InstanceType<T>提取构造函数对应的实例类型:
const Web3 = require('web3'); import { Chains } from "./Chains" export class Web3Provider { provider: InstanceType<typeof Web3>; constructor(endpoint: string) { this.provider = new Web3(endpoint); } }
InstanceType<typeof Web3>会准确获取new Web3()返回的实例类型,替代any后能获得完整的类型校验和代码提示。
内容的提问来源于stack exchange,提问作者Riccardo Perego
相关产品推荐
相关产品推荐

