Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to access non static property from static function in typescript

I am mocking the User and need to implement static method findOne which is static so I do not need to extensiate User in my calling class:

export class User implements IUser {

    constructor(public name: string, public password: string) { 

        this.name = 'n';
        this.password = 'p';
    }

    static findOne(login: any, next:Function) {

        if(this.name === login.name) //this points to function not to user

        //code

        return this; //this points to function not to user
    }
}

But I can't access this from static function findOne is there a ways of doning it in typescript?

like image 238
sreginogemoh Avatar asked Feb 12 '16 01:02

sreginogemoh


1 Answers

It's not possible. You can't get an instance property from a static method because there is only one static object and an unknown number of instance objects.

You can, however, access static members from an instance. This will probably be useful for you:

export class User {
    // 1. create a static property to hold the instances
    private static users: User[] = [];

    constructor(public name: string, public password: string) { 
        // 2. store the instances on the static property
        User.users.push(this);
    }

    static findOne(name: string) {
        // 3. find the instance with the name you're searching for
        let users = this.users.filter(u => u.name === name);
        return users.length > 0 ? users[0] : null;
    }
}
like image 155
David Sherret Avatar answered Nov 14 '22 23:11

David Sherret