0

TypeScript: Декоратор для функции, а не метода. Возможно?

11

Я пытаюсь добавить пользовательский декоратор TypeScript в функцию, которая не входит в класс, и похоже, что компилятор выдает ошибки, независимо от того, что я делаю.

Есть ли какие-либо мысли по этому поводу? Это возможно?

2 ответ(ов)

0

Для добавления пользовательского декоратора TypeScript к функции важно учитывать, что вы не можете использовать его прямо на обычной функции, так как это повлияет на поднятие (hoisting) функций. Любая попытка обернуть одну функцию в другую нарушает механизм поднятия, что может привести к ошибкам.

Целевые объекты поддержки

Декоратор — это особый вид декларации, который может быть прикреплен к декларации класса, методу, доступу, свойству или параметру. Декораторы используют синтаксис @expression, где expression должен возвращать функцию, которая будет вызвана во время выполнения с информацией о декорированной декларации.

Документация: TypeScript Decorators

0

Это невозможно, потому что декоратор метода использует PropertyDescriptor, и этот объект можно применять только в классах.

Тем не менее, существует библиотека, которая позволяет использовать декораторы методов и для функций, но без синтаксиса @myDecorator. Вы можете воспользоваться уже существующими декораторами методов для функций.

Ссылка на библиотеку: pure-function-decorator.

Если в классе это можно записать так:

class Something {
  @log
  myMethod() { /*....*/ }
}

То в функции это делается несколько иначе:

const myFunction = fnDecorator([log], () => { /*....*/ });

Результат будет таким же.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь