当前位置: 首页 > 知识库问答 >
问题:

javascript - node.js中装饰器decorators能单独用在独立的方法函数上吗?

壤驷阳冰
2023-10-24

如下图,自己在node.js中实现了一个用于记录错误的装饰器,然后发现装饰器能用在类或者类的方法中,而用在独立的方法中则会报错:Decorators are not valid here.ts(1206)
所以想请教下node.js中装饰器是否只能用于类或者类的方法上的呢

共有2个答案

贺自明
2023-10-24

是的,修饰函数你直接调用传入就行了const test = LogError(function test() {})
https://github.com/tc39/proposal-decorators
截屏2023-10-24 20.49.51.png

仲阳朔
2023-10-24

在 Node.js 中,装饰器(Decorators)主要用于类和方法,而不能直接用于独立的函数上。这是因为装饰器是用于描述如何修改类的行为的特殊注解。

当你尝试将装饰器用于独立的函数时,TypeScript 会抛出一个错误,提示 "Decorators are not valid here"(装饰器在这里无效)。

要在 Node.js 中使用装饰器,你需要将它们应用于类或类的方法。以下是一个简单的示例:

import { decorator } from 'decorators';class MyClass {  @decorator  myMethod() {    // do something  }}

在这个例子中,装饰器 decorator 被应用于 myMethod 方法。当你调用 myMethod 时,装饰器会按照预期的方式修改其行为。

如果你希望在独立的函数中使用装饰器,你可能需要使用一些其他的技术或模式,例如将函数包装在一个对象的方法中,或者使用其他形式的函数修饰。

 类似资料:
  • 问题内容: 我正在考虑开发由两部分组成的桌面应用程序: 用户界面(例如Java应用) 后端Node.js服务器 2个部分通过插座连接。不要问为什么我知道这很奇怪。 我将希望能够为客户提供带有安装程序的应用程序。我不希望用户必须自己安装Node.js。 有没有一种方法可以独立安装Node.js服务器,即无需在系统上全局安装Node.js。 对于任何(Windows,Linux,Mac OS X …)

  • 我有一些HTML元素,它们都有相同的标记。每个div都有一个唯一的父类。 因此,当我尝试编写一些jQuery来单独针对每个元素时,它会在所有实例上触发,而不管我是否指定要针对哪个类。我的想法是,通过使用(this)它将只针对div“box__wrapper-before”中的内容。 有人知道我错在哪里吗? null null Codepen示例:https://Codepen.io/nickels

  • 这些内建函数不(更多)关心它们左侧参数的类型。 switch Note: 该内建函数从 FreeMarker 2.3.23 版本开始可用。 这是 switch-case-default 指令 的基本内联(表达式)版本。它的通用版本就像 matchedValue?switch(case1, result1, case2, result2, ... caseN, resultN, defaultRes

  • 有用 Python 编写的流行服务器来容纳 WSGI 应用并提供 HTTP 服务。这些服务器在运行 时是独立的:你可以从你的 web 服务器设置到它的代理。如果你遇见问题,请注意 代理设置 一节的内容。 Gunicorn Gunicorn ‘Green Unicorn’ 是一个给 UNIX 用的 WSGI HTTP 服务器。这是一个从 Ruby 的 Unicorn 项目移植的 pre-fork w

  • 本文向大家介绍DBMS中的数据独立性,包括了DBMS中的数据独立性的使用技巧和注意事项,需要的朋友参考一下 数据库包含大量数据。并非所有数据都是用户数据,某些数据可能是元数据等。因此,数据库具有数据独立性非常重要。 数据独立性基本上意味着,如果在某个级别上更改数据,则不会影响更高级别上的数据视图,因此,更高级别上的数据应与更低级别上的数据修改无关。  有两种类型的数据独立性。这些是- 逻辑数据独立

  • 我想为我的测试函数构建一个具有多种用途的装饰器。其中之一是帮助向生成的添加属性。 我知道有一个名为的fixture内置pytest,它正好做到了这一点。我如何在我的装饰器内使用这个固定装置? 我知道我可以将夹具直接传递到每个测试函数中,并在测试中使用它,但我有很多测试,这样做似乎非常多余。 另外,我知道我可以使用创建一个自定义标记并在decorator中调用它,但是我有很多文件,我不能单独管理所有