TypeScript: Декоратор для функции, а не метода. Возможно?
Я пытаюсь добавить пользовательский декоратор TypeScript в функцию, которая не входит в класс, и похоже, что компилятор выдает ошибки, независимо от того, что я делаю.
Есть ли какие-либо мысли по этому поводу? Это возможно?
2 ответ(ов)
Для добавления пользовательского декоратора TypeScript к функции важно учитывать, что вы не можете использовать его прямо на обычной функции, так как это повлияет на поднятие (hoisting) функций. Любая попытка обернуть одну функцию в другую нарушает механизм поднятия, что может привести к ошибкам.
Целевые объекты поддержки
Декоратор — это особый вид декларации, который может быть прикреплен к декларации класса, методу, доступу, свойству или параметру. Декораторы используют синтаксис @expression
, где expression
должен возвращать функцию, которая будет вызвана во время выполнения с информацией о декорированной декларации.
Документация: TypeScript Decorators
Это невозможно, потому что декоратор метода использует PropertyDescriptor
, и этот объект можно применять только в классах.
Тем не менее, существует библиотека, которая позволяет использовать декораторы методов и для функций, но без синтаксиса @myDecorator
. Вы можете воспользоваться уже существующими декораторами методов для функций.
Ссылка на библиотеку: pure-function-decorator.
Если в классе это можно записать так:
class Something {
@log
myMethod() { /*....*/ }
}
То в функции это делается несколько иначе:
const myFunction = fnDecorator([log], () => { /*....*/ });
Результат будет таким же.
'unknown' против 'any': в чем разница?
Разница между "require(x)" и "import x"
@Directive против @Component в Angular
ESLint: 8.0.0 Не удалось загрузить плагин '@typescript-eslint'
Как создать заглушку для интерфейса / определения типа в TypeScript?