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

TypeScript中能否向函数传入动态类型?(TS错误码2322)

问题解决与动态类型应用说明

1. 修复TS错误码2322的问题

你遇到的TS2322错误,是因为transformRequest函数声明返回Promise<T>,但实际返回的{ error: ... }对象并不符合泛型参数T的结构(T是IApiResponse的子类型,比如IUserData)。

要修复这个问题,有两种实用方案:

  • 类型断言(测试场景适用)
    如果是测试时需要强制返回错误对象,可以用类型断言告知TS返回值符合T类型:
    async function transformRequest<T>(data: T): Promise<T> {
      return {
        error: {
          status: 404,
          name: 'NotFound',
          message: 'Not Found',
        }
      } as T;
    }
    
  • 泛型约束(生产场景推荐)
    更严谨的方式是约束T必须是IApiResponse的子类型,确保返回的错误对象结构匹配:
    async function transformRequest<T extends IApiResponse<any>>(data: T): Promise<T> {
      return {
        ...data, // 保留原数据结构,覆盖error字段
        error: {
          status: 404,
          name: 'NotFound',
          message: 'Not Found',
        }
      };
    }
    

2. 动态类型的应用

makeRequest函数已经通过泛型<T>实现了动态类型支持——调用时传入不同的类型参数(比如IUserData、IRoleData),就能让函数返回对应类型的结果,这就是TypeScript中动态类型的典型用法。

比如你的调用代码:

const user = await makeRequest<IUserData>('https://localhost/api/user/1');
const role = await makeRequest<IRoleData>('https://localhost/api/role/1');

这里IUserData和IRoleData就是动态传入的类型,TS会根据传入的类型参数自动推断返回值类型,完全满足查询用户、角色等多种数据场景的需求。

内容的提问来源于stack exchange,提问作者Петр Петров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:50:27