TypeScript:实现基于参数的不同返回类型时出现类型错误
TypeScript泛型方法返回类型错误分析与解决
你的代码
handleTab<B extends boolean = false>(getIndex?: B): B extends true ? number : string { return getIndex ? 1 : ''; }
报错信息
Type 'string | number' is not assignable to type 'B extends true ? number : string'.
Type 'number' is not assignable to type 'B extends true ? number : string'
问题原因
TypeScript编译器无法将泛型条件类型和返回值的三元表达式做精准关联。虽然你逻辑上想根据B的取值返回对应类型,但编译器会把getIndex ? 1 : ''判定为string | number联合类型,而非根据B的具体值匹配条件类型的结果,导致类型不兼容。
解决办法
方案1:类型断言
通过类型断言明确告知编译器返回值符合条件类型要求:
handleTab<B extends boolean = false>(getIndex?: B): B extends true ? number : string { return (getIndex ? 1 : '') as B extends true ? number : string; }
方案2:函数重载
用函数重载更清晰地定义不同参数对应的返回类型,可读性更强:
handleTab(): string; handleTab(getIndex: true): number; handleTab(getIndex?: boolean): string | number { return getIndex ? 1 : ''; }
内容的提问来源于stack exchange,提问作者Picklejw_
相关产品推荐
相关产品推荐

