如何让TypeScript函数根据不同输入返回对应类型?
解决方案:让TypeScript函数根据输入布尔值自动推断返回类型
你需要的是让函数的返回类型和输入的布尔字面量建立关联,而不是用宽泛的联合类型。这里有两种常用的实现方式:
方法一:函数重载
通过定义多个重载签名,明确指定不同输入对应的返回类型:
// 重载签名:明确输入true/false对应的返回类型 function example(input: true): string; function example(input: false): number; // 实现签名:内部用联合类型兼容两种情况 function example(input: boolean): string | number { return input ? "string" : 0; }
调用时TS会自动推断类型:
const str = example(true); // str 类型自动为 string const num = example(false); // num 类型自动为 number
这种方式直观易懂,适合输入是明确的true/false字面量的场景。
方法二:条件类型(泛型)
利用TypeScript的条件类型,通过泛型动态推导返回类型:
function example<T extends boolean>(input: T): T extends true ? string : number { // 这里用as any避免实现时的类型报错,TS暂时无法自动匹配条件类型的返回 return input ? "string" : 0 as any; }
效果和重载一致,而且支持更灵活的泛型场景。如果输入是一个布尔类型的变量(不是字面量),会返回联合类型;如果是字面量true/false,则精确推断:
const flag = Math.random() > 0.5; const result = example(flag); // result 类型为 string | number const str = example(true); // str 类型为 string
两种方法都能解决你需要的“自动识别返回类型”的需求,不需要再手动做类型检查。
内容的提问来源于stack exchange,提问作者one23four56
相关产品推荐
相关产品推荐

