You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
type num = VALUE.ZERO | VALUE.ONE | VALUE.TWO;
const number0: num = 0;
const number1: num = 1;
const number2: num = 2;
const number3: num = 3; // Success??
Examples
How do I define a type constraint in my enumeration value?
enum VALUE {
ZERO,
ONE,
TWO,
}
type KEY = keyof typeof VALUE; // "ZERO" | "ONE" | "TWO"
The text was updated successfully, but these errors were encountered:
Sadly the enum feature in TS doesn't achieve what you want here, assuming I'm understanding what you're asking. You can do something like this:
export const VALUE = {
ZERO: 0,
ONE: 1,
TWO: 2
} as const;
type ValueType = typeof VALUE;
type Value = ValueType[keyof ValueType];
const One: Value = 1; // Ok
const Three: Value = 3; // Error
The flaw with the above is that nothing stops you from using values from other "enums" as the type Value (if their numerical value is 0, 1 or 2). For that, you would need some version of branded types.
Btw if your enum values don't come from some external source that forces them to be integers, string literal unions are often a better idea for reasons like the above.
Search Terms
enum
keyof
typeof
Use Cases
Examples
How do I define a type constraint in my enumeration value?
The text was updated successfully, but these errors were encountered: