Как перебрать свойства интерфейса Typescript? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть интерфейс FilterData, который выглядит следующим образом:

export interface FilterData {
  variables?: string[];
  processDefinitionKey?: string;
}

В запросе к серверу я получаю объект filterSettings, который имеет тип FilterData, и Мне нужно перебрать его.

Вот что я сейчас делаю:

for (const key in filterSettings) {
  filterString += `${key}_eq_${filterSettings[key]},`;
}

Но я получаю следующую ошибку:

Элемент неявно имеет тип 'any', потому что выражение типа 'string' нельзя использовать для индексации типа 'FilterData'. Нет подписи индекса с параметром типа 'string' для типа 'FilterData'.ts (7053)

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

Ответы [ 3 ]

1 голос
/ 15 апреля 2020

Вы можете просто сказать машинописи, что вы уверены, что key равно keyof Filterdata:

for (const key in filterSettings) {
  filterString += `${key}_eq_${filterSettings[key as keyof FilterData]},`;
}

Вы можете установить noImplicitAny: false в своем tsconfig.json

1 голос
/ 15 апреля 2020

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

Пожалуйста, смотрите мой ответ здесь Как l oop хотя Запись способы итерации по объекту

0 голосов
/ 15 апреля 2020

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

const filterSettings: FilterData;

for (const key of ['variables', 'processDefinitionKey']) {
  filterString += `${key}_eq_${filterSettings[key]},`;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...