typescript提取一个对象的value作为枚举类型
JS

typescript提取一个对象的value作为枚举类型

admin
2026-01-09 / 0 评论 / 3 阅读 / 正在检测是否收录...

在 TypeScript 中,假如你之前已经定义过一个对象,如

const obj = {
  A: 1,
  B: 2,
  C: 3
}

之后,你想定义一个函数,这个函数的入参就是上面的这个对象的值的其中一个,也就是

function func(val: 1 | 2 | 3) {}

此时,可以通过对象key取值方法来取obj对象的可能值作为枚举类型

具体方法为

步骤 1:修改对象的定义,在后面加上 as const

const obj = {
  A: 1,
  B: 2,
  C: 3
} as const; // 使用 `as const` 确保对象是只读的

步骤 2:提取值的联合类型

使用 typeof 和 keyof 提取对象的值作为联合类型:

function func(val: typeof obj[keyof typeof obj]) {}

解读

  • typeof obj 获取 obj 的类型。
  • keyof typeof obj 获取 obj 的所有键(即 "A" | "B" | "C")。
  • typeof obj[keyof typeof obj] 获取 obj 的所有值的联合类型(即 1 | 2 | 3)。

上面的代码有两个关键

as const:将对象标记为只读,确保 TypeScript 推断出具体的字面量类型(如 1 而不是 number)。
typeof MODES[keyof typeof MODES]:通过索引访问对象的值类型,生成联合类型 1 | 2 | 3。

扩展:提取键的联合类型

如果你还需要提取键的联合类型(如 "A" | "B" | "C"),可以这样做:

type ModeKeys = keyof typeof MODES;

总结

通过 typeof 和 keyof,你可以轻松提取对象的键或值的联合类型。这种方法非常适合将常量对象转换为枚举类型,同时保持类型安全。如果你有其他问题,欢迎随时提问!

0

评论 (0)

取消