gpt4 book ai didi

typescript - 如何确保 Typescript 字符串枚举具有相同的键和值

转载 作者:行者123 更新时间:2023-12-04 00:25:40 25 4
gpt4 key购买 nike

我想创建一个通用类型来检查枚举上的以下内容:

  1. 所有字段都是字符串
  2. 所有的值都等于它们自己的键

那么在这种情况下,以下枚举将被认为是“正确的”:

enum correct1 {
bar = 'bar',
baz = 'baz',
}

enum correct2 {
quux = 'quux',
}

但以下不会:

enum wrongFoo {
bar = 'bar',
baz = 'WRONG',
}

enum wrongFoo2 {
bar = 1
}

实现这一点的正确语法是什么?

最佳答案

如果您可以接受手动编译时检查(意味着您必须在 enum 定义之后手动编写一些内容),您可以这样做:

type EnsureCorrectEnum<T extends { [K in Exclude<keyof T, number>]: K }> = true;

然后让编译器计算 EnsureCorrectEnum<typeof YourEnumObjectHere> .如果它编译,很好。如果没有,那就有问题了:

type Correct1Okay = EnsureCorrectEnum<typeof correct1>; // okay
type Correct2Okay = EnsureCorrectEnum<typeof correct2>; // okay

type WrongFooBad = EnsureCorrectEnum<typeof wrongFoo>; // error!
// ┌─────────────────────────────> ~~~~~~~~~~~~~~~
// Types of property 'baz' are incompatible.

type WrongFoo2Bad = EnsureCorrectEnum<typeof wrongFoo2>; // error!
// ┌──────────────────────────────> ~~~~~~~~~~~~~~~~
// Types of property 'bar' are incompatible.

这些错误也相当具有描述性。

好的,希望对您有所帮助;祝你好运!

Link to code

关于typescript - 如何确保 Typescript 字符串枚举具有相同的键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57203304/

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