🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.www
Article #408818

Re: TypeScript - jak uzyskać zmienne prywatne? Gdzie korzyści z TS?

#408818
From: Marek S
Date: Thu, 05 Sep 2019 17:58
78 lines
2576 bytes
W dniu 2019-09-05 o 05:54, Szyk Cech pisze:

> Na pewno wiesz co robisz?

Wydaje mi się, że tak. Od lat programuję w natywnym JS.

> _message raczej powinno być tylko jedno w obu klasach. Dziedziczenie 
> polega na tym, że od przodka wjeżdża wszystko.
> Inny problem jest taki, że _message jest prywatna. 

No i o tym problemie mowa. W natywnym JS ES6 nie mam problemu z 
tworzeniem zmiennych prywatnych, a i metod też - choć ponoć takowe nie 
istnieją. TS już tego nie potrafi więc w tym zakresie kuleje. Oto przykład:

Moduł 1:

let privateMethod = Symbol();
let privateVar = Symbol();

class a {
   constructor() {
     this[privateVar]=5;
   }

   this[privateMethod]() {
     console.log(this[privateVar]);
   }

   printA() {
     this[privateMethod]();
   }

}

Moduł 2:

import a from ...

let privateMethod = Symbol();
let privateVar = Symbol();

class b extends a {
   constructor() {
     this[privateVar]=10;
   }

   printB() {
     this.printA();
     console.log(this[privateVar]);
   }

}

let obj = new b();
obj.printB(); // metoda publiczna

// 5
// 10

obj.printA(); //metoda publiczna

//5

obj[privateMethod](); //metoda prywatna

//error

W powyższym przykładzie privateVar jest prawdziwie prywatne dla obu 
klas. Wywołanie prywatnej metody privateMethod kończy się błędem. Da się 
to zrobić w ES6? Da się! A TypeScript wymięka. A wystarczyłoby aby 
transkodował prywatne zmienne i metody do konstrukcji z wykorzystaniem 
symboli.

Kod pisałem z palca - więc mogłem jakieś błędy popełnić.

-- 
Pozdrawiam,
Marek
Technical Details
Message-ID: <qkrica$s14$1@news.icm.edu.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!.POSTED!not-for-mail
References: <qkp5ov$imf$1@news.icm.edu.pl> <bG%bF.588988$GfB1.22808@fx36.am4>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!.POSTED!not-for-mail
From: Marek S <precz@spamowi.com>
Newsgroups: pl.comp.www
Subject: Re: TypeScript - jak uzyskać zmienne prywatne?
 Gdzie korzyści z TS?
Date: Thu, 5 Sep 2019 19:58:32 +0200
Organization: ICM, Uniwersytet Warszawski
Lines: 78
Message-ID: <qkrica$s14$1@news.icm.edu.pl>
References: <qkp5ov$imf$1@news.icm.edu.pl> <bG%bF.588988$GfB1.22808@fx36.am4>
NNTP-Posting-Host: 89-77-183-104.dynamic.chello.pl
Mime-Version: 1.0
X-Trace: news.icm.edu.pl 1567706314 28708 89.77.183.104 (5 Sep 2019 17:58:34 GMT)
X-Complaints-To: usenet@news.icm.edu.pl
NNTP-Posting-Date: Thu, 5 Sep 2019 17:58:34 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.0
In-Reply-To: <bG%bF.588988$GfB1.22808@fx36.am4>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit