Как сделать проверку времени компиляции Typescript, чтобы убедиться, что 2 Enums имеют одинаковые значения - PullRequest
0 голосов
/ 10 марта 2020

Мне нужно иметь 2 перечисления с одинаковыми ключами, но разными значениями. Я хочу знать, во время компиляции оба имеют одинаковые ключи, и ничего не пропущено или добавлено. Это для констант, которые я хочу использовать.

Я знаю, что могу достичь этого с помощью интерфейса и создать объект для обоих типов, когда тип является интерфейсом, который я создал, но это помешает мне использовать const enum или просто enum, который имеет свои преимущества.

Например, я хочу убедиться, что следующие перечисления имеют одинаковые клавиши:

enum Enum1 {
    bar = "bar1",
    baz = "baz1",
}

enum Enum2 {
    bar = "bar2",
    baz = "baz2"
}

1 Ответ

0 голосов
/ 10 марта 2020

Я провел некоторый поиск и нашел довольно простой способ получить его, с небольшим количеством кода и, конечно же, с помощью Enums.

Все проверки правильности - это типы, которые будут пропущены в конечном коде.

// @ts-ignore, потому что я не использую T Generi c, и мне просто нужно проверить его extends never, который мы получим, когда Omit получим поля одного Enum из прочее и ничего не осталось, но когда любое дополнительное поле осталось, значение не равно never, поэтому компилятор покажет нам ошибку. Мы сделаем это для обоих перечислений для другого перечисления.

См. Код здесь на игровой площадке.

enum Enum1 {
    bar = "bar1",
    baz = "baz1",
}

enum Enum2 {
    bar = "bar2",
    baz = "baz2"
}

// @ts-ignore
type EnsureEnumEqual<T extends never> = true;

type OK1 = EnsureEnumEqual<keyof Omit<typeof Enum1, keyof typeof Enum2>>;
type OK2 = EnsureEnumEqual<keyof Omit<typeof Enum2, keyof typeof Enum1>>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...