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

TypeScript如何获取string字面量联合类型的可选值总数量?

核心结论

不存在你预期的直接接收SomeType类型作为入参的函数。TypeScript属于静态类型语言,所有类型定义仅在编译阶段做类型校验使用,编译为JavaScript后所有类型都会被完全擦除,你定义的SomeType联合类型在运行时不存在,无法直接作为参数传入函数。

可行替代实现方案

你可以通过「运行时实体 + 反向推导类型」的方式实现需求,不需要单独维护两套定义,两种常用实现如下:

方案1:const数组 + 类型推导

// 先定义运行时可用的取值数组,用as const锁定值类型
const SomeTypeValues = ['a', 'b', 'c'] as const
// 从数组推导联合类型,和你原始定义的SomeType效果完全一致
type SomeType = typeof SomeTypeValues[number]

// 取值数量直接读取数组length即可
const count = SomeTypeValues.length
// 也可以封装为通用函数
function getUnionValueCount<T extends readonly unknown[]>(arr: T) {
  return arr.length
}

// 调用效果符合预期
assertEq(getUnionValueCount(SomeTypeValues), 3)

方案2:枚举实现

枚举是TypeScript少数会保留运行时实体的类型特性,也可以实现需求:

enum SomeType {
  a = 'a',
  b = 'b',
  c = 'c'
}

// 通用枚举值计数函数
function getEnumValueCount(e: object) {
  return Object.keys(e).length
}

assertEq(getEnumValueCount(SomeType), 3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:06:03