Как предотвратить ошибки «@ typescript-eslint / unbound method» на интерфейсах TypeScript, не относящихся к классу? - PullRequest
0 голосов
/ 12 июля 2020

В приведенном ниже коде не используются классы или this. Как я могу предотвратить ошибки typescript-eslint в коде только для функций (без классов)? Я знаю, что могу отключить правило глобально, но правило полезно для кода класса. Я знаю, что могу отключить его по одной строке за раз, но это похоже на боль, учитывая, насколько распространены функции обратного вызова, определенные в интерфейсах TS. Есть ли другой способ?

Вот упрощенный пример проблемы:

interface FooProps {
  bar(): void;
}

export function foo(props: FooProps) {
  const { bar } = props;
  // ^^^ Avoid referencing unbound methods which may cause unintentional scoping of `this`.
  //     eslint(@typescript-eslint/unbound-method)
  return bar;
}

1 Ответ

1 голос
/ 12 июля 2020

Эту проблему невероятно легко решить, просто заменив bar(): void на bar: () => void.

Пример:

interface FooProps {
  bar: () => void;
}

export function foo(props: FooProps) {
  const { bar } = props;  // no lint error
  return bar;
}

Мне всегда было интересно, почему члены с функциональным значением Интерфейс TypeScript имел два разных синтаксиса. Я всегда предполагал, что оба синтаксиса имеют одинаковое значение. Теперь я знаю лучше: синтаксис bar(): void, по-видимому, означает «функцию-член класса», а bar: () => void означает «свойство с функциональным значением, которое не использует this».

Выход из пары вопросов и ответов вот так, чтобы следующая жертва не теряла полчаса, как я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...