gpt4 book ai didi

Typescript 将所有枚举值映射为键

转载 作者:行者123 更新时间:2023-12-03 21:54:13 25 4
gpt4 key购买 nike

我声明了一个映射,因此我可以将数字枚举值转换为我们的 API 期望的值。

export const StatusMap: ReadonlyMap<Status, string> = new Map([
[Status.NEW, 'new'],
[Status.PENDING, 'pending'],
]);

但是当我这样做时 statusMap.get(Status.NEW)它总是告诉我返回值可能是未定义的。有没有办法强制 map (或类似的)包含所有枚举值?

是的,我知道你在技术上可以做到

export enum Status {
NEW = 'new',
PENDING = 'pending',
}

但老实说,这种破坏了枚举(IMO)的意义。

最佳答案

如果您可以使用常规对象代替 Map ,可以定义为 Record枚举成员:

const statusMap: Record<Status, string> = {
[Status.NEW]: 'new',
[Status.PENDING]: 'pending',
};

Playground

另一种选择是使用类型断言来保证所有枚举成员都在 map 中:
type StatusMap = { get<T extends Status>(status: T): string }

const statusMap = new Map([
[Status.NEW, 'new'],
[Status.PENDING, 'pending'],
]) as StatusMap;

** 请注意,使用这种方法不能保证所有枚举成员在运行时都在 map 中,所以如果您选择这种方式 - 最好通过单元测试来覆盖它。

关于Typescript 将所有枚举值映射为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62082215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com