Dacă aș face așa ceva de mai jos, cum pot avea acces la proprietatea din clasa?
class Person
{
private static name: string;
}
console.log(Person.name);
Nu ar trebui să-l inaccesibil?
Dacă aș face așa ceva de mai jos, cum pot avea acces la proprietatea din clasa?
class Person
{
private static name: string;
}
console.log(Person.name);
Nu ar trebui să-l inaccesibil?
Ar trebui să fie o eroare, dar nu este. De spec, secțiunea 8.2.1:
Nu este posibil să se specifice accesibilitatea staticii-ele sunt efectiv întotdeauna publice.
Modificatori de accesibilitate pe staticii sunt ceva echipa a considerat în trecut. Dacă aveți un caz puternic de utilizare ar trebui să aducă acest lucru pe CodePlex site - ul!
Ei bine, nu într - adevăr, de fapt , poți. Poate cel mai important este de a întreba despre typescript versiunea care se referă. Am beta v1.5 , o parte din instalarea mea VS2012 (da, funcționează în ciuda faptului că se adresează VS2013).
Am o clasă de genul:
class ItemListPreProcessor {
private static names: string[] = [ 'Name', 'Age' ];
static createHeader = (eltName: string) => {
var pdiv = $(eltName);
pdiv.html('<table><thead><tr></tr></thead></tr><tbody></tbody></table>');
var row = $('tr', pdiv);
ItemListPreProcessor.names.forEach((n) => {
row.append('<th>' + n + '</th>');
});
return $('tbody', pdiv);
};
}
În exemplul de mai sus se poate vedea atât privateși static. Clasa este compilat la următoarea Javascript:
var ItemListPreProcessor = (function () {
function ItemListPreProcessor() {
}
ItemListPreProcessor.names = ['Name', 'Age'];
ItemListPreProcessor.createHeader = function (eltName) {
var pdiv = $(eltName);
pdiv.html('<table><thead><tr></tr></thead></tr><tbody></tbody></table>');
var row = $('tr', pdiv);
ItemListPreProcessor.names.forEach(function (n) {
row.append('<th>' + n + '</th>');
});
return $('tbody', pdiv);
};
return ItemListPreProcessor;
})();
și nu există nici o problemă, fie compilarea (acest lucru vedeți), precum și executarea acesteia (acest lucru ar trebui să încredere, sau, dacă doriți, încercați).
class Person
{
private static theName: string = "John";
static get name():string{
return Person.theName;
}
}
console.log(Person.name);
În cazul în care o proprietate statică este privat trebuie să furnizeze o metodă get statică pentru a accesa. Acest lucru nu poate fi o soluție comună, dar este singura cale știu de a avea acces direct o proprietate privată statică. Pe de altă parte, va trebui să adăugați oa doua metodă obține dacă intenționați, de asemenea, pentru a avea acces la proprietatea de la un obiect instantiat. Ambele metode de a obține pot avea același nume, deoarece metoda get statica va fi invizibil pentru obiectul instantiat.