首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用类型记录中的属性装饰符访问值

无法使用类型记录中的属性装饰符访问值
EN

Stack Overflow用户
提问于 2022-09-14 18:23:29
回答 2查看 136关注 0票数 0

我正在编写一个香草打字程序,如下所示

代码语言:javascript
复制
class DecoratorClass{
  @HelloWorld
  public property1:string="Siddu Rocks"
}
function HelloWorld(target:any,propertyName:string){
    console.log("The Class Target and prop names are:"+target[propertyName] + "," + 
                  propertyName)
}

我得到了输出,因为类目标和道具名称是:未定义的,property1而不是类目标和道具名称是: Siddu,property1

为什么我要得到未定义的财产价值,这里有什么我遗漏的东西吗?我试过查看多个博客,但没有结果。

请帮帮我

EN

回答 2

Stack Overflow用户

发布于 2022-09-14 18:36:40

一个常见的误解是:装饰器中的target实际上不是类但是类原型本身的一个实例。

而且,转移的JavaScript实际上看起来像这样(即使在使用ESNext目标时也是这样):

代码语言:javascript
复制
class DecoratorClass {
    constructor() {
        this.property1 = "Siddu Rocks";
    }
}

这就是为什么当您尝试记录target[propertyName]时,会给出undefined。它不是在类上声明的,而是在创建类的实例时设置的。

在上面的链接中,也有以下说明:

属性描述符不作为属性装饰器的参数提供,因为属性装饰器是如何在TypeScript中初始化的。这是因为在定义原型成员时,目前没有描述实例属性的机制,也没有办法观察或修改属性的初始化程序。返回值也被忽略。因此,属性装饰器只能用于观察已为类声明了特定名称的属性。

本质上,类装饰器只能用于修改属性(用getter/setter替换,观察对其的更改,验证更改,等等)。

票数 1
EN

Stack Overflow用户

发布于 2022-09-14 18:34:51

属性装饰器正在修改类,而不是实例。因此,在调用property1时没有设置HelloWorld

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73721578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档