如何从 TypeScript 中的枚举中省略值

在 TypeScript 中省略枚举值

How to Omit values from an Enum in TypeScript

使用Exclude实用程序类型从枚举中省略值,例如
type WithoutMultiple = Exclude<Sizes, Sizes.Small | Sizes.Medium>. 实用程序类型通过
Exclude从原始类型中排除提供的成员来构造新类型。

索引.ts
// ✅ For Numeric Enums enum Sizes { Small, Medium, Large, ExtraLarge, } // 👇️ type WithoutSmall = Sizes.Medium | Sizes.Large | Sizes.ExtraLarge type WithoutSmall = Exclude<Sizes, Sizes.Small>; // 👇️ type WithoutMultiple = Sizes.Large | Sizes.ExtraLarge type WithoutMultiple = Exclude<Sizes, Sizes.Small | Sizes.Medium>;

我们使用
Exclude
实用程序类型从枚举中省略值。

我们传递给的第一个类型Exclude是枚举本身,第二个是我们要排除的值。

请注意,我们也可以直接传递值而无需在枚举上访问它们。

索引.ts
enum Sizes { Small, Medium, Large, ExtraLarge, } // 👇️ type WithoutSmall = Sizes.Medium | Sizes.Large | Sizes.ExtraLarge type WithoutSmall = Exclude<Sizes, 0>;

没有初始值的数字枚举中的第一个成员的值为0

这种方法也适用于字符串枚举。

索引.ts
enum Sizes { Small = 'S', Medium = 'M', Large = 'L', ExtraLarge = 'XL', } // 👇️ type WithoutSmall = Sizes.Medium | Sizes.Large | Sizes.ExtraLarge type WithoutSmall = Exclude<Sizes, Sizes.Small>; // 👇️ type WithoutMultiple = Sizes.Large | Sizes.ExtraLarge type WithoutMultiple = Exclude<Sizes, Sizes.Small | Sizes.Medium>;

您还可以直接传递字符串枚举的值,而不在枚举上引用它们。

索引.ts
enum Sizes { Small = 'S', Medium = 'M', Large = 'L', ExtraLarge = 'XL', } // 👇️ type WithoutSmall = Sizes.Medium | Sizes.Large | Sizes.ExtraLarge type WithoutSmall = Exclude<Sizes, 'S'>; // 👇️ type WithoutMultiple = Sizes.Large | Sizes.ExtraLarge type WithoutMultiple = Exclude<Sizes, 'S' | 'M'>;

可视化实用程序类型如何工作的一种简单方法Exclude是使用联合类型。

索引.ts
type U = 'a' | 'b' | 'c'; // 👇️ type T1 = "a" | "b" type T1 = Exclude<U, 'c'>; // 👇️ type T2 = "a" type T2 = Exclude<U, 'c' | 'b'>;

我们传递给的第一个类型Exclude是联合类型,第二个是我们要为构造类型省略的类型。

如果您需要排除多种类型,请确保使用管道分隔它们
|,而不是逗号或分号。

发表评论