You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:31:11