网站搜索

typescript - 是否有可能遍历联合类型的键?


在 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];

答案#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))