Typescript массив вопросов прохождения функций - PullRequest
1 голос
/ 08 апреля 2019

В моей программе есть место, где проверяются многие условия.

В отличие от написания выражений большого типа if(conditionOne || conditionTwo || ...), я решил определить массив фильтров следующим образом:

const filters: Array<(err: MyError) => boolean> = [
      (e: MyError) => e.checkSomething(),
      (e: MyError) => e.checkSomethingElse,
      (e: MyError) => e.checkSomethingYetAgain()
    ];

Затем я обхожу его так:

for (const key in filters) {
      if (filters[key](err)) {
        return true;
      }
    }
return false;

Мне кажется, есть более функциональный способ выразить это (поскольку сейчас, на мой взгляд, это выглядит слишком императивно), но я не уверен, как это выглядит. Спасибо!

1 Ответ

1 голос
/ 08 апреля 2019

Может быть с find:

function makeErrorFilter(filters: Array<(err: MyError) => boolean>) {
  return (err: MyError) => !!filters.find(filter => filter(err));
}

const errorFilter = makeErrorFilter([
  (e: MyError) => e.checkSomething(),
  (e: MyError) => e.checkSomethingElse,
  (e: MyError) => e.checkSomethingYetAgain()
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...