首页 > 解决方案 > 如何在运行时调用属性装饰器?

问题描述

好奇我们如何在运行时调用属性装饰器。例如,如果我们运行以下代码:

    function PropertyDecorator(
        target: Object, // The prototype of the class
        propertyKey: string | symbol // The name of the property
        ) {
        console.log("PropertyDecorator called on: ", target, propertyKey);
    }

    class PDE {
        @PropertyDecorator
        name: string;
    }

它将记录PropertyDecorator called on: PDE {} name,因此在加载类时调用装饰器。假设我们想在这样的实例上再次调用它PDE

const newPDE = PDE();
callDecoratorsOnProperties(newPDE);

这是怎么做的?

标签: javascripttypescriptannotationsdecorator

解决方案


评论是正确的。属性装饰器不能在运行时调用。它们只是设计时的结构。因此,示例问题中的日志记录语句仅在类加载期间运行,然后再也不会做任何事情。由“加载”事件为类实例提供额外的机制,这些机制可用于我正在查看的目的,在本例中是验证实例。

所以我要做的是改变类的原型,并提供一个额外的函数,可以调用它来验证已被注释的类的实例。

如果有人跟随同一个“思想轨迹”,我的下一个问题是如何将额外的参数传递给 decorator


推荐阅读