Как я могу извлечь ключи объекта в тип, применяя значения? - PullRequest
1 голос
/ 16 апреля 2020

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

interface Foo {
  name: string;
}

interface MyObject {
  [key: string]: Foo;
}

const myObject: MyObject = {
  a: {name: 'this is a'},
  b: {name: 'this is b'},
}

type Keys = keyof typeof myObject;

Этот пример в настоящее время не работает, потому что typeof myObject разрешается в MyObject, который имеет key типа string. Если я не наберу от myObject до MyObject, тогда он правильно разрешит Keys до "a" | "b". Однако тогда он больше не будет принудительно утверждать, что все значения являются действительными экземплярами Foo.

Могу ли я как-нибудь съесть свой пирог и поесть в без необходимости предопределять Keys как перечисление и использование его для определения MyObject?

Пример того, чего я хотел бы избежать:

type Keys = "a" | "b"

interface MyObject {
  [key in Keys]: Foo;
}

const myObject: MyObject = {
  a: {name: 'this is a'},
  b: {name: 'this is b'},
}

(потому что я не хочу обновлять Keys и myObject каждый раз, когда я добавляю или удаляю ключ.

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