【问题标题】:Is is possible to iterate over the keys of a union type?是否可以迭代联合类型的键?
【发布时间】:2022-08-18 23:18:34
【问题描述】:

例如,是否可以在 Typescript 中迭代联合类型的键,类似于使用 Object.keys(someVar).map() 的方式?

示例类型可能是:

type Status = \"status_1\" | \"status_2\" | \"status_3\"

我见过的另一种方法是创建一个不可变数组,然后使用带有索引的typeof 运算符来模拟此功能,但这似乎很笨拙

export const CaseStatuses = [\"status_1\", \"status_2\", \"status_3\"] as const;
export type CaseStatus = typeof CaseStatuses[number];

  • TypeScript 的类型不存在在运行时,因为它们在编译中被删除了,剩下的就是 JavaScript。
  • const CaseStatuses = [\"status_1\" | \"status_2\" | \"status_3\"] as const; 是什么意思?您在字符串上使用按位| 运算符吗?那不是任何事情的运作方式。

标签: typescript


【解决方案1】:

除了不可变数组之外,您还可以使用枚举类型而不是联合类型。它是唯一在编译时未被擦除的类型(枚举在编译时被转译为对象)。然后,使用Object.keys()/Object.values() 对其进行迭代。

enum Status {
  status_1 = "status_1",
  status_2 = "status_2",
  status_3 = "status_3",
}

// Iterate over it
console.log(Object.values(Status))

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多