12

I am trying to access a static member from a non-static function in the class, and I get an error saying

Static member cannot be accessed off an instance variable

this is how my code looks -

class myClass {
  public static testStatic: number = 0;
  public increment(): void {
    this.testStatic++;
  }
}

From what I understand of static members/methods, we shouldn't access non-static members in static functions, but vice-versa should be possible. the static member is already created and is valid, so why can't I access from my non-static method?

3 Answers 3

18

Access static members from inside the class the same way you would from outside the class:

class myClass {
  public static testStatic: number = 0;
  public increment(): void {
    myClass.testStatic++;
  }
}
Sign up to request clarification or add additional context in comments.

2 Comments

It works but it's not a very good practice. Typescript should have a keyword for that. Something like static:: in php. The reason is you're duplicating the name of your class like this. Basically every instance should know its class, right?
I don't see why it's needed for classes any more than it's needed for anything else. There isn't a keyword for the name of the enclosing function, the name of the enclosing module, etc.
2

I personally prefer something in the spirit of:

class myClass{
    public static testStatic: number = 0;
    private class;

    constructor(){
        this.class = myClass;
    }

    public increment(): void {
        this.class.testStatic++;
    }
}

One cool thing is that typescript is actually allowing me to use 'class' as a variable.

1 Comment

It is still duplication, but duplication in one place only - the constructor.
1

For allowing inheritance you must use inside a instance method in order to don't repeat className:

<typeof ParentClass>this.constructor

See the Update section in this answer: https://stackoverflow.com/a/29244254/1936549

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.