在 TypeScript 中将枚举(enum)用作受限键(key)或值类型

2025 年 2 月 2 日 星期日
/

在 TypeScript 中将枚举(enum)用作受限键(key)或值类型

极简版 (猜你想看)

对一个 enum A而言,key in A指的是A的值,key in keyof typeof A指的是它的键。

翻译

原文(来自bobbyhadz.com)

在 TypeScript 中使用枚举作为受限键或值类型

使用keyof typeof将枚举作为受限键类型。
构建的类型将包含所有枚举键,其值初始化为any

enum Sizes {
  Small = 'S',
  Medium = 'M',
  Large = 'L',
  ExtraLarge = 'XL',
}

/**
 * 👇️ let values: {S: any; M: any; L: any; XL: any}
 */
let values: { [key in Sizes]: any };

/**
 * 👇️ let keys: {Small: any; Medium: any; Large: any; ExtraLarge: any}
 */
let keys: { [key in keyof typeof Sizes]: any };

[!TIP] The code for this article is available on GitHub

第一个示例展示了如何构造一个包含枚举值作为键的类型,第二个示例则使用枚举键构造了一个类型。
> [!TIP] > 如果不想让构造类型中的所有键或值都是必填项,可使用问号将其设置为可选项。

enum Sizes {
  Small = 'S',
  Medium = 'M',
  Large = 'L',
  ExtraLarge = 'XL',
}

/**
 * 👇️ let values: {S?: any; M?: any; L?: any; XL?: any}
 */
let values: { [key in Sizes]?: any };

/**
 * 👇️ let keys: {Small?: any; Medium?: any; Large?: any; ExtraLarge?: any}
 */
let keys: { [key in keyof typeof Sizes]?: any };

现在,使用者只能指定他需要的密钥。

enum Sizes {
  Small = 'S',
  Medium = 'M',
  Large = 'L',
  ExtraLarge = 'XL',
}

/**
 * 👇️ let values: {S?: any; M?: any; L?: any; XL?: any}
 */
let values: { [key in Sizes]?: any };

values = { M: 'medium' };

/**
 * 👇️ let keys: {Small?: any; Medium?: any; Large?: any; ExtraLarge?: any}
 */
let keys: { [key in keyof typeof Sizes]?: any };

keys = { Large: 'large' };

[!TIP] The code for this article is available on GitHub

在处理枚举时,keyof typeof(暂未翻译)构建了一种类型,将所有枚举键表示为字符串。

enum Sizes {
  Small = 'S',
  Medium = 'M',
  Large = 'L',
  ExtraLarge = 'XL',
}

// 👇️ type KeysUnion = "Small" | "Medium" | "Large" | "Extra Large"
type KeysUnion = keyof typeof Sizes;

如果您需要检查枚举中是否存在某个值,请点击这篇文章

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...