访问 TypeScript 中默认无名类中的静态属性

Posted

技术标签:

【中文标题】访问 TypeScript 中默认无名类中的静态属性【英文标题】:Access static property in default nameless class in TypeScript 【发布时间】:2017-01-26 11:59:09 【问题描述】:

如果我定义一个这样的类(在一个名为.MyClass.ts 的文件中)

export default class 
    static someProperty = 1;

    someMethod() 
       var a = ????.someProperty
    


如何访问 someProperty。 显然,使用this.someProperty 不起作用。也不能使用名称。如果它是一个命名类,它可以通过SomeClassName.someProperty 访问。

如果我将模块加载到另一个文件中。我可以通过以下方式访问它:

MyClass.someProperty

【问题讨论】:

如果它是一个静态属性,那么您也可以在内部访问它......它不起作用吗? How to access static members from instance methods in typescript?的可能重复 @MikeMcCaughan 你是说this.someMethod吗?还是只是someMethod?两者都行不通。 @MikeMcCaughan 是的,你会使用它的名字。这里的问题是该类没有名称。 【参考方案1】:

您在这里使用了匿名类表达式。我可能是错的,但我相信命名类表达式是您可以访问该变量的唯一方法。

 export default class ClassName 
    static someProperty = 1;

    someMethod() 
        return ClassName.someProperty;
    


您的消费者仍然可以随意命名该类(在您之前的示例中为 MyClass)

【讨论】:

【参考方案2】:

你可以使用

this.constructor.someProperty

【讨论】:

使用它会导致编译器错误:“类型'Function'上不存在属性'someProperty'” 不幸的是,要以这种方式使用它,您需要强制转换类型,如下所示:const x = (<typeof YourClassName>this.constructor).someStaticProp

以上是关于访问 TypeScript 中默认无名类中的静态属性的主要内容,如果未能解决你的问题,请参考以下文章

Typescript - 从基类中的静态方法实例化子类,使用 args 并引用其他静态方法

TypeScript:继承类中静态方法的自引用返回类型

如果跨应用程序域访问类中的静态数据会怎样?

为啥我们不能在 TypeScript 类中定义一个 const 字段,为啥静态只读不起作用?

Typescript 应用程序中的“mpromise(猫鼬的默认承诺库)已弃用”

php父类中访问子类的静态属性