Búsqueda de sitios web

propiedades - Cómo acceder a una propiedad no estática desde una función estática en TypeScript


Estoy burlándome del User y necesito implementar el método estático findOne que es estático, por lo que no necesito instanciar User en mi clase que llama:

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
    }
}

Pero no puedo acceder a this desde la función estática findOne. ¿Hay alguna manera de hacerlo en TypeScript?

Respuesta #1

No es posible. No puedes obtener una propiedad de instancia desde un método estático porque solo hay un objeto estático y un número desconocido de objetos de instancia.

Sin embargo, puedes acceder a los miembros estáticos desde una instancia. Esto probablemente te será útil:

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;
    }
}

Artículos relacionados