【问题标题】:Typescript decorators parameters打字稿装饰器参数
【发布时间】:2021-02-27 11:06:41
【问题描述】:

我想了解 Typescript 装饰器的不同参数。

function myDecorator(target) {
  // do something with 'target' ...
}

在上面的例子中,我知道target代表了装饰器所附加的函数/类,但是装饰器的其他参数是什么,它们的含义是一个命令,我也想获得一个官方文档的链接指定这个。

提前致谢。

【问题讨论】:

  • TypeScript Documentation 但您也应该阅读:How much research effort is expected of Stack Overflow users? “在 Stack Overflow 上提问应该是您寻找答案过程中的最后一步” “打字稿装饰器”与我的搜索引擎,这是第一个结果。不到 30 秒的研究工作。
  • @ThomasSablik 我在发布之前检查了您评论中的官方文档,但我找不到我正在寻找的信息。
  • “我在那里找不到我要查找的信息。” 您应该再检查一次。我在那里找到了。每种装饰器类型都有自己的列表。

标签: javascript typescript


【解决方案1】:

装饰器需要一个参数,它装饰的目标和更多参数,具体取决于目标的类型,例如

方法装饰器

方法装饰器的表达式将作为函数调用 在运行时,使用以下三个参数:

  • 要么是静态成员的类的构造函数,要么是实例成员的类的原型。
  • 成员的姓名。
  • 成员的属性描述符。

您可以在 TypeScript Decorators 上找到所有装饰器类型的完整列表:

  • 类装饰器

    • 仅目标类
  • 方法装饰器

    • 要么是静态成员的类的构造函数,要么是实例成员的类的原型,
    • 成员的姓名,
    • 成员的属性描述符
  • 访问器装饰器

    • 要么是静态成员的类的构造函数,要么是实例成员的类的原型。
    • 成员的姓名。
    • 成员的属性描述符。
  • 属性装饰器

    • 要么是静态成员的类的构造函数,要么是实例成员的类的原型。
    • 成员的姓名。
  • 参数装饰器

    • 要么是静态成员的类的构造函数,要么是实例成员的类的原型。
    • 成员的姓名。
    • 函数参数列表中参数的序号索引。

另外:

如果我们想自定义如何将装饰器应用于声明, 我们可以写一个装饰器工厂。装饰工厂只是一个 返回将被调用的表达式的函数 运行时的装饰器。

[TypeScript Decorators]

您可以根据需要创建带有参数的装饰器工厂。它们没有限制或指定。

TypeScript 文档中的示例。

装饰者:

function sealed(target) {
  // do something with 'target' ...
}

适用于

@sealed x

装饰厂:

function color(value: string) {
  // this is the decorator factory
  return function (target) {
    // this is the decorator
    // do something with 'target' and 'value'...
  };
}

申请为

@color('blue') x

【讨论】:

  • 为什么在文档中是这样的:return function (target, propertyKey: string, descriptor: PropertyDescriptor) { console.log("f(): called"); }; (这是一个装饰器工厂返回的装饰器,它有3个参数?
  • @Platus 我改变了答案。参数取决于目标的类型并列在链接中。
猜你喜欢
  • 1970-01-01
  • 2020-06-12
  • 2018-06-21
  • 2019-07-29
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
  • 2015-12-12
相关资源
最近更新 更多