Как сделать перечисление Typescript с интерфейсами реализаций
У меня есть это 2 перечисления
все ключи enum ENNAME должны включать только ключи enum POSTAG
export enum POSTAG
{
BAD = 0x80000000,
D_A = 0x40000000,
D_B = 0x20000000,
D_C = 0x10000000,
}
export enum ENNAME
{
D_A = 'a',
D_B = 'b',
D_C = 'c',
}
есть ли способ сделать что-то подобное ??
export interface ENNAME
{
[k: keyof POSTAG]: string,
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не можете заставить enum расширить interface. Лучшее, что вы можете сделать, - это настроить проверку типов во время компиляции, чтобы выдавать предупреждение, если вы допустили ошибку, например:
interface ENNAMEInterface extends Record<Exclude<keyof typeof POSTAG, "BAD">, string> { }
type VerifyExtends<T, U extends T> = true
type VerifyENNAME = VerifyExtends<ENNAMEInterface, typeof ENNAME>; // okay
Это должно скомпилироваться, если значение ENNAME имеет те же ключи, что и значение POSTAG (минус "BAD") со строковыми значениями. В противном случае VerifyENNAME выдаст ошибку:
export enum ENNAME {
D_A = 'a',
D_B = 'b',
// oops, D_C is missing
}
type VerifyENNAME = VerifyExtends<ENNAMEInterface, typeof ENNAME>; // error
// ~~~~~~~~~~~~~
// Property 'D_C' is missing in type 'typeof ENNAME' but required in type 'ENNAMEInterface'.
Надеюсь, это поможет. Удачи!