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

Typescript如何根据入参类型设置Date/string条件函数返回类型

TypeScript 双向类型映射函数实现方案

方案1:函数重载(最推荐,适配普通函数)

直接通过函数重载明确入参和返回值的对应关系,TS 调用时会自动匹配对应重载签名,无需额外断言:

// 重载签名1:入参为字符串时返回 Date 类型
function toggleDateString(value: string): Date;
// 重载签名2:入参为 Date 时返回字符串类型
function toggleDateString(value: Date): string;
// 实现签名:仅做内部类型兼容,外部调用不会命中该签名
function toggleDateString(value: Date | string): Date | string {
  if (typeof value === 'string') {
    // 这里替换为你自己的字符串转日期逻辑
    return new Date(value);
  } else {
    // 这里替换为你自己的日期转字符串逻辑
    return value.toISOString();
  }
}

调用示例:

// 自动推断 date 变量类型为 Date
const date = toggleDateString('2024-05-20');
// 自动推断 str 变量类型为 string
const str = toggleDateString(new Date());

方案2:泛型条件类型(适配箭头函数)

如果需要用箭头函数实现,可以通过泛型+条件类型定义类型映射,外部调用同样无需断言:

// 定义类型映射规则:入参是string返回Date,否则返回string
type ToggleReturn<T extends string | Date> = T extends string ? Date : string;

const toggleDateString = <T extends string | Date>(value: T): ToggleReturn<T> => {
  if (typeof value === 'string') {
    return new Date(value) as ToggleReturn<T>;
  } else {
    return value.toISOString() as ToggleReturn<T>;
  }
}

注:函数内部的 as 断言仅用于兼容TS的类型推导限制,不影响外部调用体验。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:54:03