Cómo personalizar las propiedades a máquina de escribir

votos
10

¿Cómo llego mecanografiado para emitir definiciones de propiedades tales como:

Object.defineProperties(this, {
    view: {
        value: view,
        enumerable: false,
        writable: false,
        configurable: false
    },
});
Publicado el 02/10/2012 a las 19:40
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
9

Puede utilizar gety seta máquina de escribir, que compilar en Object.defineProperties.

Esta es una característica de ECMAScript 5, por lo que no se puede utilizar si se dirigen a ES3 (el valor por defecto para el compilador). Si usted es feliz para apuntar ES5, añadir --target ES5a su comando.

Mecanografiado:

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

Compila a:

var MyClass = (function () {
    function MyClass() { }
    Object.defineProperty(MyClass.prototype, "View", {
        get: function () {
            return this.view;
        },
        set: function (value) {
            this.view = value;
        },
        enumerable: true,
        configurable: true
    });
    return MyClass;
})();

Pero si quieres un control total de la configuración enumerables y configurable - que aún se podía utilizar la prima Object.definePropertiesde código.

Respondida el 04/10/2012 a las 22:42
fuente por usuario

votos
4

Yo estaba buscando exactamente lo mismo cuando me topé Manual mecanografiado: decoradores . En "Método decoradores" el párrafo que definen @enumerablela fábrica decorador, que se parece a esto (estoy simplemente copiar y pegar desde allí):

function enumerable(value: boolean) {
    return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
        descriptor.enumerable = value;
    };
}

y lo utilizan como esto:

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }

    @enumerable(false)
    greet() {
        return "Hello, " + this.greeting;
    }
}

Así pues, otra manera de hacer frente a ella, es a través del uso de decoradores.

PD: Esta función requiere experimentalDecoratorsla bandera que se pasa a tsco conjunto de tsconfig.json.

Respondida el 27/02/2017 a las 13:39
fuente por usuario

votos
1

Esto no es compatible actualmente si desea que todas las propiedades a ser emitidos por el estilo. Me gustaría recomendar la presentación de un tema en el sitio CodePlex con detalles acerca de lo que su caso y los requisitos de uso son.

Si lo hace compilar con --target ES5, puede tener algo como esto:

class n {
    get foo() { return 3; }
    bar() { return 5; }
}

Que produce este código:

var n = (function () {
    function n() { }
    Object.defineProperty(n.prototype, "foo", {
        get: function () {
            return 3;
        },
        enumerable: true,
        configurable: true
    });
    n.prototype.bar = function () {
        return 5;
    };
    return n;
})();
Respondida el 02/10/2012 a las 19:43
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more