Я провел некоторый поиск и нашел довольно простой способ получить его, с небольшим количеством кода и, конечно же, с помощью 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>>;