AFAIK, расширение перечислений составляет на рассмотрении , в то же время вы можете использовать константные объекты вместо:
const KINDS = <const>{
STATIC: 1,
FIELD: 2,
ARG: 3,
VAR: 4
};
const ALL_KINDS = <const>{ ...KINDS, NONE: 5 };
В вышеуказанном потоке есть и другие обходные пути.
Если вы хотите, чтобы этот тип был проверен, обратите внимание, что с точки зрения типа числовое значение enum
эквивалентно 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 (?)
Если вы используете объект, как предложено выше, вы можететакже принудительно выполняйте строгую проверку типов, создавая тип для всех возможных значений этого объекта:
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
Это немного более многословно, но тогда ваш тип фактически проверен.