Typescript klase


#1

U Typescriptu
private property radi cudno? Ili nesto krivo radim?

Naime kako god postavio property u klasi bilo private, public, protected uvijek je public. Tj. barem meni tako izgleda. Kada napravim objekt iz klase on ima taj property koji je private. Ako se ne varam u C# ili php-u recimo private property nije dostupan u napravljenom objektu.


#2

To se desava iz razloga zato sto Typescript te stvari provjerava iskljucivo prilikom compile time-a.

Kod se na kraju jednostavno transpajlira u ES5 i to je to.

Primjer

Kao sto vidis TS te je upozorio da pokusavas pristupiti private metodi iz vana, medjutim kada se i to transpajlira vidis da je ta metoda zakacena na prototype i da je naravno dostupna svugdje.


#3

što je compile time?

Vidim iz primjera, a tako se i meni ponaša na projektu. Kada se transpajlira u js svi private propertiji su dostupni.

Mislio sam postići da privatni propertiji ne budu dostupni. hmm…


#4

Typescript ima compiler, i on kompajlira tvoj Typescript kod u nesto sto browser moze razumjeti.

Kada se kod kompajlira (compile-time), rade se provjere da li su sva pravila zadovoljena (da li je kod sintaticki ispravan, da li su neke language specific stvari zadovoljene i slicno), i tu ti dobijes ovo upozorenje.

U ovom Playgroundu je to veoma sturo odradjeno.Ja trenutno pisem React sa Typescriptom, i cim napravis ovakvu gresku ili neku slicnu koja ne zadovaljava pravila TS, pojavi ti se greska u terminalu, gdje je server startan, kao i na app screeenu.

Da jesu dostupni, ali ne zaboravi da ti pises Typescript, a ne JS i da ti taj output uopste neces dirati.

Ako zelis da se tvoj kod ne kompajlira uopste, u slucaju da postoji neka greska u TS kodu, onda bi flag
--noEmitOnError trebao biti od pomoci.


#5

Aha compile time, ok to je nešto kao bildanje aplikacije. Svjestan sam da je typescript kompajliran na kraju u javascript.

Ja pišem angular sa typescriptom. U praksi sam napravio sam kompleksan objekt sa puno propertija u više dimenzija koji je napravljen iz 8-9 klasa. Napravljen objekt sam konzolirao (npr. console.log(greeter) ) tako da vidim cijeli objekt. Konkretno nisam probao u typescriptu pozvati property ili metodu koja je private. ali u konzoli ju vidim.