在 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
是联合类型,第二个是我们要为构造类型省略的类型。
如果您需要排除多种类型,请确保使用管道分隔它们
|
,而不是逗号或分号。