У меня есть много объектов функций, подобных
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
}