Búsqueda de sitios web

Crear una variable con get/set dentro de un módulo en Typescript


Quiero crear una variable con propiedades get/set dentro de un módulo. Vi algunos ejemplos que funcionan para crear una propiedad get/set dentro de una clase que se ve así:

class MyClass {
    private view;
    get View() { return this.view; }
    set View(value) { this.view = value }
}

Pero quiero hacer lo mismo dentro de un módulo :

module MyModule {
    export var view;
    //I want to create get/set methods for view property here
}

¿Cómo hago eso?

Respuesta #1

Creo que es solo un descuido; lo plantearé con el equipo de diseño (no veo ninguna razón obvia por la que estaría prohibido, aparte de "aún no lo hemos implementado"). Es bastante sencillo sortear la falta de soporte de primera clase del lenguaje para ello:

module Bar {
    var _qua = 42;

    declare export var qua: number;
    Object.defineProperty(Bar, 'qua', {
        get: function() { return _qua; },
        set: function(value) { _qua = value; }
    }); 
}

// Works
var x = Bar.qua;
console.log(x);
Bar.qua = 19;
console.log(Bar.qua);

Respuesta #2

Los accesores son solo para "miembros". Los miembros solo pueden ser parte de una clase, al menos así es TypeScript.

Los accesores se definen en el prototipo de las clases, algo que un módulo no tiene. Si realmente quieres, puedes definirlo manualmente, y funciona.

module MyModule {
    var view;
    export var View;
    Object.defineProperty(MyModule, "View", {
        get: function () {
            console.log(1);
            return view;
        },
        set: function (val) {
            console.log(2, val);
            view = val;
        },
        enumerable: true,
        configurable: true
    });
}

MyModule.View = 555;
window["mm"] = MyModule.View;

Como era de esperar, obtuve la salida de:

> 2 555
> 1

Aunque honestamente no lo haría :)

Artículos relacionados