@JuliaClifford

Как итерировать объект, который наследуется от интерфейса?

У меня есть объект tasks, который наследуется от интерфейса ITaskListState. Мне нужно пройти по всем полям оъекта и отфильтровать их по условию.
Tasks:
tasks: ITaskListState = {
    tasksToDo: new Array<ITaskItem>(),
    tasksInProgress: new Array<ITaskItem>(),
    finishedTasks: new Array<ITaskItem>(),
  }

Interface ITaskListState:
export interface ITaskListState
{
  tasksToDo:  Array<ITaskItem>,
  tasksInProgress: Array<ITaskItem>,
  finishedTasks:  Array<ITaskItem>,
}

Я пыталась реалировть фильтрацию так:
filterTasks(filteredTask: ITaskItem)
  {
    for (let key in this.tasks)
    {
      this.tasks[key] = this.tasks[key].filter((task: ITaskItem) => task !== filteredTask);
      console.log(key);
    }
}

Но во время компиляции я получаю ошибку:
TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'ITaskListState'. No index signature with a parameter of type 'string' was found on type 'ITaskListState'.

Как я могу обойти эту ошибку компилятора?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
filterTasks(filteredTask: ITaskItem) {
  const keys = Object.keys(this.tasks) as Array<keyof ITaskListState>;

  for (let i = 0; i < keys.length; ++i) {
    const key = keys[i];
    this.tasks[key] = this.tasks[key].filter((task: ITaskItem) => task !== filteredTask);
    console.log(key);
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы