Ввод декоратора свойств объекта - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть много объектов функций, подобных

const functionsObject = {
   a: () => {/* does stuff */},
   b: () => {/* does other stuff */},
}

Я написал декоратор, который регистрирует доступ к любой из этих функций, но я изо всех сил пытаюсь набрать его правильно. Без // @ts-ignore Typescript жалуется, что строка типа не может использоваться для индексации типа T . Я понимаю, почему так сказано, но я не могу понять, как от этого избавиться. Вот мой код:

export const decorateWithLogging = <T extends { [functionName: string]: (...args: any) => any }> (functionObject: T) => {
  for (const key of Object.keys(functionObject)) {
    const fn = functionObject[key]
    // @ts-ignore <--- ** I want to get rid of this **
    functionObject[key] = function(...args: any) {
      console.info('Calling function:', key)
      return fn.call(this, ...args)
    }
  }
  return functionObject
}
...