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

如何在TypeScript中根据条件定义函数输出类型?

实现根据参数动态切换函数返回类型

要让textTransformer根据toNumberIfNeeded的取值返回对应类型,你可以用TypeScript函数重载或者泛型条件类型来实现,下面是两种可行方案:

方案一:函数重载

直接定义多个函数签名,明确不同参数组合对应的返回类型:

interface Options {
    uppercase?: boolean;
    filterSpecialChars?: boolean;
    toNumberIfNeeded?: boolean;
}

// 重载签名1:不带options或toNumberIfNeeded为false/未传,返回string
export function textTransformer(text: string): string;
// 重载签名2:toNumberIfNeeded为true,返回number
export function textTransformer(text: string, options: Options & { toNumberIfNeeded: true }): number;
// 重载签名3:其他options组合,返回string
export function textTransformer(text: string, options: Options): string;

// 实现函数
export function textTransformer(text: string, options?: Options) {
    const { uppercase, filterSpecialChars, toNumberIfNeeded } = options || {};
    // 你的处理逻辑
    return toNumberIfNeeded ? parseInt(text) : text;
}

调用时TypeScript会自动推断返回类型:

textTransformer('hello'); // 类型推断为string
textTransformer('123', { toNumberIfNeeded: true }); // 类型推断为number
textTransformer('abc', { uppercase: true }); // 类型推断为string

方案二:泛型结合条件类型

通过泛型约束Options的具体类型,用条件类型动态推导返回值:

// 定义泛型Options,让toNumberIfNeeded可以是字面量true/false或者undefined
type Options<T extends boolean | undefined = undefined> = {
    uppercase?: boolean;
    filterSpecialChars?: boolean;
    toNumberIfNeeded?: T;
};

// 函数返回类型根据T的取值判断:T为true则返回number,否则返回string
export const textTransformer = <T extends boolean | undefined>(
    text: string,
    options?: Options<T>
): T extends true ? number : string => {
    const { uppercase, filterSpecialChars, toNumberIfNeeded } = options || {};
    // 你的处理逻辑
    return (toNumberIfNeeded ? parseInt(text) : text) as any;
};

调用时的类型推断效果和方案一一致:

textTransformer('hello'); // string
textTransformer('123', { toNumberIfNeeded: true }); // number
textTransformer('test', { filterSpecialChars: true }); // string

注意:方案二中的as any是因为TypeScript无法自动识别条件类型的返回值匹配,需要手动断言,这是当前TypeScript的局限。


内容的提问来源于stack exchange,提问作者Epple

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:58:29