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
相关产品推荐
相关产品推荐

