TypeScript: утверждать, что литерал объекта имеет одинаковые пары "ключ-значение" - PullRequest
2 голосов
/ 07 мая 2020

Возможно ли в TypeScript утверждать, что литерал объекта const создан таким образом, что каждый ключ равен своему значению?

Другими словами:

// Good
const testIds: KeyEqualsValue = {
  foo: 'foo'
} as const

// Bad
const testIds: KeyEqualsValue = {
  foo: 'bar' // Error
} as const

Ответы [ 2 ]

4 голосов
/ 07 мая 2020

Не с одним типом, вы можете сделать это с помощью функции:

function propAsValue<T extends { [P in keyof T]: P }>(o: T) {
    return o;
}
const testIds = propAsValue({
    foo: 'foo'
});

const testIds2 = propAsValue({
    foo: 'bar'
});

Playground Link

Или с помощью встроенной функции, если вы хотите будьте краткими и запутайте всех:

const testIds = (<T extends { [P in keyof T]: P }>(o: T) => o)({
    foo: 'foo'
});

Хотя я не уверен, каков ваш вариант использования для этого, вам может быть лучше использовать Object.keys.

0 голосов
/ 07 мая 2020

Да, вы можете получить ключи объекта с помощью Object.keys , тогда вы можете l oop через ключи и сравнить строковые значения. Если они не равны, вы можете выдать ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...