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

如何将TypeScript联合类型中的number转换为string类型?

解决方案

问题出在原工具类型没有对联合类型的成员进行分布式处理。我们需要调整条件类型的写法,让它能逐个处理联合类型中的每个成员:

首先定义一个用于转换单个类型的工具:

type ElementNumberToString<T> = T extends number ? string : T;

然后修改原NumberToString类型,将每个属性的类型传入这个工具:

type NumberToString<T> = {
  [K in keyof T]: ElementNumberToString<T[K]>;
};

原理说明

TypeScript的条件类型在处理联合类型时,会自动触发分布式条件类型机制——当条件类型的输入是联合类型时,它会将联合拆分为单个成员,分别应用条件判断后再将结果合并为新的联合类型。

原写法中T[K] extends number是直接判断整个联合类型(比如number | null)是否继承自number,显然不成立,所以返回原类型。而拆分后,ElementNumberToString会分别处理number和null,得到string和null,最终合并为string | null。

验证示例

  • 输入{ num: number },输出{ num: string },符合预期。
  • 输入{ maybeNum: number | null },输出{ maybeNum: string | null },解决了原问题。
  • 输入{ mixed: number | string | boolean },输出{ mixed: string | boolean },正确转换了联合中的number成员。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:45:39