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

TypeScript中如何给泛型IAssetGetManyResponseDto传递类型参数

错误原因

你定义的IAssetGetManyResponseDto是带泛型参数<T>的接口,使用时必须传入T对应的具体业务类型(也就是你items数组里每个元素的类型),不能直接使用泛型接口本身。

解决步骤

1. 先确认你单个资产的业务类型

你需要先定义/找到项目中单个资产的类型,示例如下(根据你的实际业务字段调整):

// 示例:单个资产的类型定义
interface IAsset {
  id: string;
  name: string;
  createTime: string;
  // 其他你业务里资产的字段
}

2. 给useState传入完整的泛型参数

把上面的资产类型作为参数传给IAssetGetManyResponseDto,两种常用写法选其一即可:

// 写法1:初始值为undefined,需要后续做空值判断
const [data, setData] = useState<IAssetGetManyResponseDto<IAsset>>();

// 写法2:设置初始默认值,后续不用额外做空值兼容,更推荐
const [data, setData] = useState<IAssetGetManyResponseDto<IAsset>>({
  items: [],
  totalCount: 0
});

3. 访问响应内容的正确方式

如果你用写法1(初始值为undefined),访问属性时要加可选链?.避免运行时报错:

// 访问资产数组:
data?.items
// 访问资产总条数:
data?.totalCount

// 渲染组件时可以加空值 fallback 更稳妥
return (
  <div>
    <NewAssetTable items={data?.items ?? []} />
  </div>
);

如果你用写法2设置了初始值,可以直接访问属性,不需要空值判断:

<NewAssetTable items={data.items} />

额外优化建议

建议给接口请求方法getAllAssets也加上返回值类型约束,保证全链路类型一致性:

// 修改api定义
export const getAllAssets = (): Promise<IAssetGetManyResponseDto<IAsset>> => {
  // 你的原有请求逻辑
}

内容的提问来源于stack exchange,提问作者elderlyman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:00:02