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
相关产品推荐
相关产品推荐

