检查 typescript 类是否有 setter/getter

2023-11-23

我有一个打字稿类,它具有以下属性:

export class apiAccount  {
    private _balance : apiMoney;
    get balance():apiMoney {
        return this._balance;
    }
    set balance(value : apiMoney) {
        this._balance = value;
    }

    private _currency : string;
    get currency():string {
        return this._currency;
    }
    set currency(value : string) {
        this._currency = value;
    }
    ...

我需要创建此类的空白实例:

let newObj = new apiAccount();

例如,然后检查它是否具有“货币”的设置器。 我以为这正是getOwnPropertyDescriptor确实如此,但显然我错了:

Object.getOwnPropertyDescriptor(newObj, 'currency')
Object.getOwnPropertyDescriptor(newObj, '_currency')

These both return undefined. But chrome seems to do it! When I hover over the instance, it shows me the properties, and shows them as undefined. How can I get a list of those property names, or check if the property descriptor exists in the object? enter image description here


“问题”在于Object.getOwnPropertyDescriptor- 顾名思义 - 只返回一个描述符对象自身的属性。即:仅直接分配给该对象的属性,not来自其原型链中的对象之一的那些。

在你的例子中,currency属性定义于apiAccount.prototype, 不开newObj。以下代码片段演示了这一点:

class apiAccount {
    private _currency : string;
    get currency():string {
        return this._currency;
    }
    set currency(value : string) {
        this._currency = value;
    }
}

let newObj = new apiAccount();
console.log(Object.getOwnPropertyDescriptor(newObj, 'currency')); // undefined
console.log(Object.getOwnPropertyDescriptor(apiAccount.prototype, 'currency')); // { get, set, ... }

如果您想在对象原型链中的任何位置查找属性描述符,则需要循环Object.getPrototypeOf:

function getPropertyDescriptor(obj: any, prop: string) : PropertyDescriptor {
    let desc;
    do {
        desc = Object.getOwnPropertyDescriptor(obj, prop);
    } while (!desc && (obj = Object.getPrototypeOf(obj)));
    return desc;
}

console.log(getPropertyDescriptor(newObj, 'currency')); // { get, set, ... }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 typescript 类是否有 setter/getter 的相关文章

随机推荐

  • Swift:如何检测 UISplitViewController 当前是否显示 1 个或 2 个控制器?

    我如何检测是否UISplitViewController目前刚刚展示1 个视图控制器或者它在双窗格中2 个视图控制器并排显示 分割视图控制器反映了实际的显示模式显示模式财产 全部可见 主 UIViewController 和辅助 UIVie
  • 我需要显式分配我的 NSNumber 吗?

    我定义一个数字 如下 NSNumber nn0 NSNumber numberWithInt 0 无需任何分配即可正常工作 我的理解是 如果我使用 numberWithInt 则会自动调用 alloc 和 init 如果我尝试在函数结束时释
  • 基于自定义 HTTP 标头的 UrlRewrite 条件

    我正在尝试在 UrlRewrite 中配置一个有 2 个条件的规则 HTTP 标头HTTP HOST需要匹配某个域 api contoso com 自定义 HTTP 标头x app version需要出现在 HTTP 请求中 根据此信息 我
  • 如何将鼠标滚轮输入定向到光标下方进行控制而不是聚焦?

    我使用了许多滚动控件 TTreeViews TListViews DevExpress cxGrids 和 cxTreeLists 等 当鼠标滚轮旋转时 无论鼠标光标位于哪个控件上 具有焦点的控件都会接收输入 如何将鼠标滚轮输入定向到鼠标光
  • 如何使用 SWIG 从 C++ 调用 Java?

    我可以使用 SWIG 从 Java 调用 C 代码 但我找不到任何有关如何执行相反操作 从 C 调用 Java 的文档 官方 SWIG 文档说 http www swig org Doc1 3 Java html java overview
  • Laravel eloquent 模型模型属性转换(我应该转换哪些属性类型?)

    我不确定我是否完全理解 Laravel Eloquent 属性转换 根据文件 https laravel com docs 8 x eloquent mutators attribute casting 这些是支持的类型 整数 实数 浮点
  • MATLAB 支持前向声明吗?

    是否可以在 m 文件中使用函数 该函数在同一文件的后面部分中实现 以与其他编程语言 例如 C 类似的风格 当然 在这样的 m 文件中 局部函数将在主函数之后声明 例如 function y main func x This is the m
  • 加速熊猫 cummin/cummax

    Pandas cummin and cummax对于我的许多组的用例来说 函数似乎真的很慢 我怎样才能加快他们的速度 Update import pandas as pd import numpy as np from collection
  • 折线图中的条件背景颜色

    我目前正在尝试将我们的图表从 PQ Systems Chartrunner 转换为 SSRS 2008 图表 我目前正在 SSRS 2008 中使用折线图 并尝试让背景颜色针对不同的西格玛进行更改 我能够计算并绘制标准差西格玛线 但我无法更
  • 如何检索 COM 类的接口 ID,以便将其传递给 CoCreateInstance?

    我想以编程方式检索任何类的接口 ID 以便可以将其传递给 CoCreateInstance 很感谢任何形式的帮助 请参阅下面的 如何获取此内容 HRESULT hResult CLSID ClassID void pInterface if
  • 转储到 JSON 添加了额外的双引号和引号转义

    我正在使用 Python 工具检索 Twitter 数据 并将这些数据以 JSON 格式转储到我的磁盘上 我注意到用双引号括起来的推文的整个数据字符串被意外转义 此外 实际 JSON 格式的所有双引号都用反斜杠转义 它们看起来像这样 cre
  • 如何跟踪WPF中TextBox中的哪个字符被删除?

    我想跟踪用户通过Delete或BackSpace键删除了哪个字符 我正在处理文本框的 TextBox ChangedEvent 我可以从中提取删除的字符吗文本更改事件参数 e 变更如果是的话我该怎么做 我想限制用户从文本框中删除任何字符 我
  • 如何更改 xcode 中的 subversion 设置?

    我已经在 Xcode 中运行了 subversion 一段时间 subversion 的集成始终悬而未决 然而我的 subversion 服务器已经改变了它的 ip 地址 并且我的 xcode 项目仍然尝试在旧 ip 上查找源 我已经通过
  • Prolog:带有内置命令的“Vanilla”元解释器

    这个答案Jan Burse 展示了 Prolog 中元解释器最简单的实现之一 solve true solve A B solve A solve B solve H clause H B solve B 我想扩展这个解释器 以便它可以调用
  • 如何将cURL转换为axios请求

    我正在尝试将 cURL 请求转换为here到 axios curl d grant type client credentials client id YOUR APPLICATION S CLIENT ID client secret Y
  • 具有多客户端通信的 Java 服务器。

    我正在为一项任务制作一个游戏 我有一个用 Java 设置的服务器和多客户端 我们使用的是 MVC 我需要让客户端将他们的名字发送到服务器 然后当有两个玩家存在时 我需要将两个名字以及他们的玩家编号 玩家一或玩家二 发送回客户端 我不明白如何
  • 如何在 C# 中的控制台窗口上显示列表项

    我有一个List包含所有数据库名称 我必须在控制台中显示该列表中包含的项目 使用Console WriteLine 我怎样才能实现这个目标 实际上你可以做得很简单 因为列表有一个ForEach方法 因为你可以传入Console WriteL
  • Python Tornado - 困惑如何将阻塞函数转换为非阻塞函数

    假设我有一个长时间运行的函数 def long running function result future Future result 0 for i in xrange 500000 result i result future set
  • { } 和等号变量之间的区别

    我对 C 编程有点陌生 我在谷歌上找不到我的答案 所以希望它能在这里得到答案 以下之间有区别吗 unsigned int counter 1 or unsigned int counter 1 这本书使用了第一个选项 它让我感到困惑 因为它
  • 检查 typescript 类是否有 setter/getter

    我有一个打字稿类 它具有以下属性 export class apiAccount private balance apiMoney get balance apiMoney return this balance set balance v