2012-10-02 8 views

Respuesta

4

Estaba buscando exactamente lo mismo cuando me encontré con TypeScript Handbook: Decorators. En "Método decoradores" el párrafo definen @enumerable 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 utilizar de esta manera:

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

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

Otra forma de abordarlo es mediante el uso de decoradores.

PS: Esta característica requiere experimentalDecorators bandera que se pasa a tsc o conjunto de tsconfig.json.

1

Esto no es compatible actualmente si desea que todas las propiedades a ser emitidos por el estilo. Le recomendaría que presente un problema en el CodePlex site con detalles sobre su caso de uso y sus requisitos.

Si lo hace compilar con --target ES5, que 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; 
})(); 
+0

Sí, estoy buscando una forma de personalizar los atributos 'enumerable', 'configurable' y 'escribible' para que coincida con mi código existente. – Spongman

9

Usted puede utilizar get y set a máquina de escribir, que compilar en Object.defineProperties.

Esta es una característica de ECMAScript 5, por lo que no puede usarla si se dirige a ES3 (el valor predeterminado para el compilador). Si está satisfecho con apuntar a ES5, agregue --target ES5 a su comando.

mecanografiado:

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

compila en:

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 - aún se podía utilizar el código crudo Object.defineProperties.

Cuestiones relacionadas