Come faccio ad avere dattiloscritto di emettere le definizioni delle proprietà quali:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Come faccio ad avere dattiloscritto di emettere le definizioni delle proprietà quali:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
È possibile utilizzare gete seta macchina, che compila in Object.defineProperties.
Questa è una caratteristica ECMAScript 5, quindi non si può usare se si prendono di mira ES3 (il valore predefinito per il compilatore). Se si è soddisfatti di indirizzare ES5, aggiungere --target ES5al vostro comando.
Dattiloscritto:
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;
})();
Ma se si vuole il pieno controllo di impostazione enumerabile e configurabile - si potrebbe ancora utilizzare il grezzo Object.definePropertiescodice.
Ero alla ricerca di esattamente la stessa cosa quando sono incappato in dattiloscritto Handbook: Decoratori . In "Metodo Decoratori" comma definiscono @enumerablefabbrica decoratore, che assomiglia a questo (io sono semplicemente copiare-incollare da lì):
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
e lo usano in questo modo:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
@enumerable(false)
greet() {
return "Hello, " + this.greeting;
}
}
Quindi, un altro modo di affrontare esso, è attraverso l'utilizzo di decoratori.
PS:
Questa funzione richiede experimentalDecoratorsbandiera per essere passato a tsco impostare in tsconfig.json.
Questo non è attualmente supportato se si desidera che tutte le proprietà di essere emessi in quel modo. Mi consiglia di deposito di una questione al sito CodePlex con i dettagli su ciò che il vostro caso e requisiti di uso sono.
Se lo fai compilare con --target ES5, si può avere qualcosa di simile a questo:
class n {
get foo() { return 3; }
bar() { return 5; }
}
Che produce questo codice:
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;
})();