Создание типа, который принимает аргумент enum - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь создать повторно используемый тип, используя тип Record.

enum MyKeys {
  ALPHA = 'ALPHA',
  BETA = 'BETA',
  GAMMA = 'GAMMA',
}

interface MyValues {
  in: any[];
  out: any[];
}

type Case<T> = Record<T, MyValues>;

В идеале я могу использовать Case<MyKeys> вместо Record<MyKeys, MyValues>.

Тип 'T' не удовлетворяет условию 'string |номер |символ '.

Тип' T 'нельзя назначить типу' symbol '

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Единственными допустимыми типами, которые могут использоваться для ключей, являются строки, числа и символы.TypeScript предоставляет встроенный псевдоним для такого объединения, называемый PropertyKey.

Встроенный тип записи будет принимать только один из них.Вот почему ваш конструктор типов должен иметь такое же ограничение.

type Case<T extends PropertyKey> = Record<T, MyValues>;
0 голосов
/ 17 декабря 2018

Аргумент типа T должен быть ограничен допустимым типом индекса:

type Case<T extends string> = Record<T, MyValues>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...