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

TypeScript基于参数的条件类型:调用时需重复指定参数值?求优化方案

优化TypeScript函数的返回值类型推导

问题描述

希望函数的返回值类型根据参数值自动确定,但当前实现必须手动指定第二个类型参数,即使不传参的场景也不例外。原代码如下:

type Result<T> = T & { extra: boolean; };
type CondResult<T, P> = P extends true ? Result<T> : T;

function build<T, B extends boolean>(someParam?: B): CondResult<T, B> {
  return {} as CondResult<T, B>;
}

// 必须手动指定第二个类型参数
const r1 = build<{ a: string; }, false>();
const r2 = build<{ a: string; }, true>(true);

优化实现

通过给泛型参数设置默认类型,并配合参数的可选性,可以让TypeScript自动推导参数对应的类型,无需手动指定第二个泛型参数:

type Result<T> = T & { extra: boolean; };
type CondResult<T, P> = P extends true ? Result<T> : T;

// 给泛型B设置默认类型false,参数someParam设为可选(默认undefined)
function build<T, B extends boolean = false>(someParam?: B): CondResult<T, B> {
  // 根据参数值返回对应结构,示例仅做类型断言
  return (someParam ? { extra: true } : {}) as CondResult<T, B>;
}

// 无需指定第二个类型参数,TypeScript自动推导
const r1 = build<{ a: string }>(); // 类型:{ a: string }
const r2 = build<{ a: string }>(true); // 类型:{ a: string } & { extra: boolean }
const r3 = build<{ a: string }>(false); // 类型:{ a: string }

优化说明

  • 给泛型参数B设置默认值false,当不传递someParam时,TypeScript会自动使用该默认类型,返回T类型。
  • 当传递someParam为true或false时,TypeScript会根据参数值自动推导出B的类型,进而确定返回值的类型。
  • 这样既保留了根据参数值动态确定返回类型的能力,又简化了函数调用的写法。

内容的提问来源于stack exchange,提问作者José Ramírez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:15:03