首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

给定一个已有的键,如何在有序的typescript字符串枚举中获得下一个或上一个键?

在TypeScript中,如果你有一个有序的字符串枚举,并且想要根据给定的键获取下一个或上一个键,你可以使用映射类型和条件类型来实现这一功能。以下是一个示例,展示了如何定义这样的类型以及如何使用它们。

定义有序字符串枚举

首先,定义一个有序的字符串枚举:

代码语言:txt
复制
enum OrderedStringEnum {
    A = 'A',
    B = 'B',
    C = 'C',
    D = 'D',
}

创建映射类型

接下来,创建两个映射类型,一个用于获取下一个键,另一个用于获取上一个键:

代码语言:txt
复制
type NextKey<K extends keyof typeof OrderedStringEnum> = 
    K extends typeof OrderedStringEnum.A ? typeof OrderedStringEnum.B : 
    K extends typeof OrderedStringEnum.D ? never : 
    keyof typeof OrderedStringEnum extends infer T ? T extends K ? never : T[number] : never;

type PrevKey<K extends keyof typeof OrderedStringEnum> = 
    K extends typeof OrderedStringEnum.D ? typeof OrderedStringEnum.C : 
    K extends typeof OrderedStringEnum.A ? never : 
    keyof typeof OrderedStringEnum extends infer T ? T extends K ? never : T[number] : never;

使用映射类型

现在,你可以使用这些类型来获取给定键的下一个或上一个键:

代码语言:txt
复制
const nextKey = <K extends keyof typeof OrderedStringEnum>(key: K): NextKey<K> => {
    const keys = Object.keys(OrderedStringEnum) as (keyof typeof OrderedStringEnum)[];
    const index = keys.indexOf(key);
    return (index === -1 || index === keys.length - 1) ? null : (OrderedStringEnum as any)[keys[index + 1]];
};

const prevKey = <K extends keyof typeof OrderedStringEnum>(key: K): PrevKey<K> => {
    const keys = Object.keys(OrderedStringEnum) as (keyof typeof OrderedStringEnum)[];
    const index = keys.indexOf(key);
    return (index <= 0) ? null : (OrderedStringEnum as any)[keys[index - 1]];
};

示例

代码语言:txt
复制
console.log(nextKey(OrderedStringEnum.A)); // 输出: B
console.log(prevKey(OrderedStringEnum.C)); // 输出: B
console.log(nextKey(OrderedStringEnum.D)); // 输出: null
console.log(prevKey(OrderedStringEnum.A)); // 输出: null

解释

  1. 定义有序字符串枚举:我们定义了一个有序的字符串枚举OrderedStringEnum
  2. 创建映射类型:我们创建了两个映射类型NextKeyPrevKey,它们分别用于获取下一个键和上一个键。
  3. 使用映射类型:我们定义了两个函数nextKeyprevKey,它们使用映射类型来获取给定键的下一个或上一个键。

应用场景

这种类型和方法在需要处理有序枚举值的场景中非常有用,例如在状态机、导航菜单、时间线等应用中。

参考链接

通过这种方式,你可以方便地在有序的TypeScript字符串枚举中获取下一个或上一个键。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 领券