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

如何将TypeScript的number类型映射为数字字符串字面量联合类型

解决TypeScript中数字类型到字符串字面量联合类型的映射问题

以下是几种可行的实现方式,你可以根据场景选择:

方法一:直接使用类型断言

既然已经预先确认actualNumber的值在0-2范围内,直接用类型断言告诉TypeScript该转换是安全的:

interface Destination {
  stringLiteralNumber: '0' | '1' | '2';
}

const actualNumber: number = 1;

const mapped: Destination = {
  stringLiteralNumber: actualNumber.toString() as '0' | '1' | '2',
};

方法二:使用类型守卫+模板字面量类型

通过类型守卫做运行时校验,同时利用模板字面量类型让TypeScript自动推导对应字符串类型:

interface Destination {
  stringLiteralNumber: '0' | '1' | '2';
}

function isValidTargetNumber(num: number): num is 0 | 1 | 2 {
  return num >= 0 && num <= 2 && Number.isInteger(num);
}

const actualNumber: number = 1;

if (isValidTargetNumber(actualNumber)) {
  const mapped: Destination = {
    stringLiteralNumber: actualNumber.toString() as `${typeof actualNumber}`,
  };
}

方法三:封装转换函数

写一个兼顾运行时安全和类型正确性的转换函数,直接返回目标联合类型:

interface Destination {
  stringLiteralNumber: '0' | '1' | '2';
}

function toTargetString(num: number): '0' | '1' | '2' {
  if (![0,1,2].includes(num)) {
    throw new Error('数值必须为0、1或2');
  }
  return num.toString() as '0' | '1' | '2';
}

const actualNumber: number = 1;

const mapped: Destination = {
  stringLiteralNumber: toTargetString(actualNumber),
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:46:00