我声明了一个映射,以便可以将数字枚举值转换为我们的API期望的值。
export const StatusMap: ReadonlyMap<Status, string> = new Map([
[Status.NEW, 'new'],
[Status.PENDING, 'pending'],
]);
但是,当我这样做时,statusMap.get(Status.NEW)
它总是告诉我返回值可能是不确定的。有没有一种方法可以强制映射(或类似映射)包含所有枚举值?
是的,我知道您可以做到
export enum Status {
NEW = 'new',
PENDING = 'pending',
}
但说实话,这种破坏枚举(IMO)的观点。
如果可以使用常规对象代替Map
,则可以将其定义为Record枚举成员:
const statusMap: Record<Status, string> = {
[Status.NEW]: 'new',
[Status.PENDING]: 'pending',
};
另一种选择是使用类型断言,以保证所有枚举成员都在映射中:
type StatusMap = { get<T extends Status>(status: T): string }
const statusMap = new Map([
[Status.NEW, 'new'],
[Status.PENDING, 'pending'],
]) as StatusMap;
**请注意,使用这种方法不能保证所有枚举成员在运行时都在映射中,因此,如果您选择这种方式-最好通过单元测试覆盖它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句