Πώς μπορώ να πάρω γραφομηχανή να εκπέμπει ορισμούς ακινήτων, όπως:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Πώς μπορώ να πάρω γραφομηχανή να εκπέμπει ορισμούς ακινήτων, όπως:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Μπορείτε να χρησιμοποιήσετε getκαι setστη γραφομηχανή, η οποία συγκεντρώνει σε Object.defineProperties.
Αυτό είναι ένα χαρακτηριστικό ECMAScript 5, έτσι δεν μπορείτε να το χρησιμοποιήσετε αν είστε στόχευση ES3 (η προεπιλεγμένη για τον compiler). Εάν είστε ευτυχείς να στοχεύσετε ES5, προσθέστε --target ES5στην εντολή σας.
γραφομηχανή:
class MyClass {
private view;
get View() { return this.view; }
set View(value) { this.view = value }
}
Συγκεντρώνει σε:
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;
})();
Αλλά αν θέλετε πλήρη έλεγχο της δημιουργίας enumerable και ρύθμισης - θα μπορούσε ακόμα να χρησιμοποιήσει την πρώτη Object.definePropertiesκώδικα.
Έψαχνα για ακριβώς το ίδιο πράγμα, όταν σκόνταψα σε γραφομηχανή Εγχειρίδιο: Διακοσμητές . Στο «Μέθοδος Διακοσμητές» παράγραφο καθορίζουν @enumerableεργοστάσιο διακοσμητής, το οποίο μοιάζει με αυτό (είμαι απλώς αντιγραφή-επικόλληση από εκεί):
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
και να το χρησιμοποιήσετε ως εξής:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
@enumerable(false)
greet() {
return "Hello, " + this.greeting;
}
}
Έτσι, ένας άλλος τρόπος αντιμετώπισης του, είναι μέσω της χρήσης των διακοσμητών.
PS:
Αυτή η λειτουργία απαιτεί experimentalDecoratorsσημαία που πρέπει να περάσει για να tscή που καθορίζονται tsconfig.json.
Αυτό δεν υποστηρίζεται προς το παρόν, αν θέλετε όλες οι ιδιότητες που πρέπει να εκπέμπεται σαν αυτό. Θα ήθελα να συστήσω κατάθεση θέμα στο χώρο CodePlex με λεπτομέρειες για το τι είναι η περίπτωση χρήσης και τις απαιτήσεις σας.
Αν το κάνετε compile με --target ES5, μπορείτε να έχετε κάτι σαν αυτό:
class n {
get foo() { return 3; }
bar() { return 5; }
}
Η οποία παράγει αυτόν τον κωδικό:
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;
})();