【问题标题】:How do I access a static property in typescript from an instance of a subclass?如何从子类的实例访问打字稿中的静态属性?
【发布时间】:2015-10-28 09:53:24
【问题描述】:

用例: 我有一个基类,许多其他类都继承自该基类。 基类称为HSManagedObject

我有另一个名为HSContext 的类,它保存HSManagedObjects 的字典,其中键是各种子类的名称,值是这些子类的实例列表。我像这样插入它们:

insertObject(object: HSManagedObject) { 
   this.projectObjects[object.key()].push(object)
}

因为当我缩小我的 javascript 时类名消失了(它们都变成了t),我为每个名为key 的类添加了一个静态属性,它唯一地标识了有问题的类。

当我将一个对象添加到字典中时,我想从实例中推断出该对象的类名。当我不知道它属于哪个子类时,有没有办法仅从实例中获取静态 key 变量?

目前我正在为每个名为key() 的子类添加一个实例方法,它返回类的静态key 值并调用实例方法来获取类值。看来我不应该这样做。所以在我所有的子类中,我都有一些这样的代码:

static key = "HSRule";
key() {
    return HSRule.key;
}

【问题讨论】:

    标签: javascript typescript metaprogramming


    【解决方案1】:

    这可能很棘手。如果 TypeScript 被编译成 JavaScript,“类”就变成了简单的变量,而静态变量只是分配给它们。 你可以试试这样的:

    Object.getPrototypeOf(object).constructor.key
    

    getPrototypeOf() Reference

    【讨论】:

    • 谢谢!这工作得很好,如果 typescript 本身支持它会很棒,但同时这是一个很好的解决方法。
    猜你喜欢
    • 2015-05-28
    • 1970-01-01
    • 2021-11-07
    • 2018-09-06
    • 2023-03-07
    • 2018-12-13
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多