TypeScript类型'never'不存在属性'getNetworkId'问题求助
解决TypeScript中Cardano钱包API的"类型'never'不存在属性'getNetworkId'"错误
问题根源
你在类中把API的类型直接声明为undefined:
API: undefined
TypeScript会判定这个变量永远只能是undefined,衍生为never类型,自然不允许调用getNetworkId这类方法。
解决方案
1. 定义符合CIP-30标准的钱包API类型接口
Cardano钱包遵循CIP-30规范,先定义对应接口来约束API类型:
// 定义CIP30标准的钱包API接口,按需添加你需要的方法 interface CIP30WalletAPI { getNetworkId: () => Promise<number>; getUtxos: () => Promise<string[]>; isEnabled: () => Promise<boolean>; enable: () => Promise<CIP30WalletAPI>; // 其他方法如getBalance、signTransaction等可按需补充 }
2. 修改类中API的类型声明
将原来的API: undefined替换为:
API: CIP30WalletAPI | undefined;
这样TypeScript就知道API要么是符合规范的钱包实例,要么是未初始化的undefined。
3. 优化方法调用逻辑(可选,增强严谨性)
可以在调用API方法前先做非空判断,替代可选链,避免潜在的隐性错误:
getNetworkId = async () => { try { if (!this.API) { console.error('钱包API未初始化,请先连接钱包'); return; } const networkId = await this.API.getNetworkId(); this.setState({ networkId }); } catch (err) { console.log(err); } }
替代方案:使用官方类型库
如果你的项目依赖@cardano-foundation/cardano-connect-with-wallet或类似官方库,可以直接导入预定义的类型,无需手动写接口:
import type { WalletApi } from '@cardano-foundation/cardano-connect-with-wallet'; // 类中声明 API: WalletApi | undefined;
内容的提问来源于stack exchange,提问作者Jacob Anderson
相关产品推荐
相关产品推荐

