Машинопись: Подстановочный знак типа свойства - PullRequest
1 голос
/ 05 февраля 2020

У меня есть заданный интерфейс из другого пакета, поэтому я не могу его изменить. Для простоты, давайте просто скажем следующий интерфейс:

interface SomeInterface {
   someProp: string;
   someOtherProp?: number;
}

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

В этом примере он разрешается к типу string | number | undefined.

Кроме того, на самом деле это не тот же вопрос, но довольно связанный с ним. Можно ли извлечь допустимые свойства имена вместо значений, поэтому в данном примере это будет тип, содержащий значения "someProp" | "someOtherProp".

. В первом случае я уже пытался тип SomeInterface[string], но я думаю, что он работает только тогда, когда для интерфейса определена подпись ключа / индекса, а не указаны c свойства.

1 Ответ

2 голосов
/ 05 февраля 2020

Получить все возможные ключи Тип сопоставления с помощью keyof

type Keys = keyof SomeInterface;

Получить все возможные значения типа сопоставления с помощью оператора индексированного доступа

type Values = SomeInterface[keyof SomeInterface];
...