Reputation: 9560
enum KINDS {
STATIC = 1,
FIELD,
ARG,
VAR
}
enum ALL_KINDS {
STATIC = 1,
FIELD,
ARG,
VAR,
NONE
}
How can I reuse the first enum inside the second one?
Upvotes: 8
Views: 8731
Reputation: 214959
AFAIK, extending enums is under consideration, in the meantime you can use const objects instead:
const KINDS = <const>{
STATIC: 1,
FIELD: 2,
ARG: 3,
VAR: 4
};
const ALL_KINDS = <const>{ ...KINDS, NONE: 5 };
There are also other workarounds in the above thread.
If you want this type to be checked, note that from the type perspective, a numeric enum
is equivalent to number
:
enum KINDS {
STATIC,
FIELD,
ARG,
VAR
}
declare function func(name: string, type: string, kind: KINDS): any;
func('foo', 'bar', KINDS.ARG); // compiles
func('foo', 'bar', 99); // compiles too (?)
If you use an object as suggested above, you can also enforce strict type checking by creating a type for all possible values of that object:
const KINDS = <const>{
STATIC: 1,
FIELD: 2,
ARG: 3,
VAR: 4
};
type KIND_VALUE = typeof KINDS[keyof typeof KINDS]
declare function define(name: string, type: string, kind: KIND_VALUE): any;
define('foo', 'bar', KINDS.ARG); // compiles
define('foo', 'bar', 99); // doesn't compile
This is a bit more verbose, but then you have your type actually checked.
Upvotes: 4