如何通过判断类型是否为undefined或特定值确定函数返回类型?
实现参数可选时返回不同类型的函数bar
需求是让bar()返回string类型,bar(10)返回number类型,这个逻辑完全可以实现,下面提供两种可靠的实现方案:
方式一:使用函数重载(推荐)
函数重载是TypeScript处理这类多返回类型场景最直观的方式,可读性高且无需额外类型断言:
function bar(): string; function bar<T>(baz: T): number; function bar(baz?: unknown) { if (baz === undefined) { return '42'; } return 42; } // 类型验证 const strResult = bar(); // strResult 类型为 string const numResult = bar(10); // numResult 类型为 number
方式二:优化泛型条件类型写法
你提供的代码思路是可行的,但需要调整泛型默认值并补充类型断言——因为TypeScript编译器无法自动将分支返回值与条件类型做匹配:
function bar<T = undefined>(baz?: T): T extends undefined ? string : number { if (baz === undefined) { return '42' as any; } return 42 as any; } // 类型验证 const str = bar(); // str 类型为 string const num = bar(10); // num 类型为 number
原代码的问题说明
你给出的代码中泛型T没有设置默认值,当不传参数时T会被推断为undefined | void,虽然不影响实际运行结果,但类型定义不够严谨;另外编译器无法自动识别分支返回值符合条件类型的约束,所以需要添加类型断言才能通过编译。
内容的提问来源于stack exchange,提问作者Rollie
相关产品推荐
相关产品推荐

