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

TypeScript如何实现支持默认返回类型的条件泛型解析函数

TypeScript 泛型函数双调用模式实现方案

要实现「无泛型调用返回默认类型、传泛型调用返回指定类型」的需求,核心是给泛型参数设置默认类型值,配合可选的类型约束即可,不需要额外写函数重载。

实现代码

首先保留已有的基础类型定义:

type TApiResponse = {/* 复杂非结构化原始响应数据 */}
type TParsedResponse = {[key:string]: string | number}[] // 通用解析结果结构
type TSpecificParsedResponse = {name:string, age:number}[] // 业务自定义解析结果结构

函数的正确类型标注如下:

const parseApiResponse = <T extends TParsedResponse = TParsedResponse>(
  apiResponse: TApiResponse
): T => {
  // 这里编写实际的响应解析逻辑
  const parsedResponse = /* 解析逻辑产出的结果 */;
  return parsedResponse as T;
};

调用效果验证

两种调用方式都能得到符合预期的类型推导:

  • 直接调用不传泛型参数:const res = parseApiResponse(rawApiResponse),此时TS自动使用泛型默认值,res的类型为TParsedResponse
  • 显式传入自定义泛型:const res = parseApiResponse<TSpecificParsedResponse>(rawApiResponse),此时res的类型为指定的TSpecificParsedResponse,可以直接访问res[0].name、res[0].age属性,不会触发类型报错

额外说明

  • 泛型里的extends TParsedResponse是可选的类型约束,作用是防止传入和基础解析结果结构完全不兼容的类型(比如传入string、number这类非对象数组类型),如果不需要这类强校验,可以去掉extends部分,直接写<T = TParsedResponse>
  • 原有写法的问题在于没有给泛型设置默认值,直接调用时TS无法推断T的实际类型,会回退到unknown,拿不到默认的TParsedResponse类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:12:31