Professional Documents
Culture Documents
Ono što je još dosta bitno znati za TypeScript, jeste da se u TS kôdu može potpuno legitimno
pisati običan JavaScript kôd. To je moguće zbog onoga što je već rečeno, TS se konvertuje u
JS što znači da ono što je kao JS napisano u TS-u će se konvertovati u JS, odnosno ostaće isto
2.5 Kompajliranje u VSC
Kompajliranje TS fajlova u JS pomoću Visual Studio Code alata se može izvršiti vrlo
jednostavno. Prvi korak je instalacija typescript kompajlera globalno i to izvršavanjem sledeće
komande u terminalu: npm install –g typescript. Nakon toga, bilo koji fajl sa .ts ekstenzijom
se može kompajlirati (pretvoriti u .js fajl) pomoću komande: tsc <naziv_fajla>.ts. Pokretanjem
ove komande pojaviće se kompajlirana verzija typescript fajla u obliku javascript-a.
2.6 Tipovi podataka
Kao što je već rečeno, u JavaScript-u ne postoje klasični tipovi podataka kao kod drugih
programskih jezika. Bolјe rečeno, tipovi se ne određuju unapred, već tokom dodele vrednosti.
Ako imamo npr.: var name = "Nemanja"; ..vrlo je lako primetiti da promenlјiva name sadrži
vrednost koja je tipa niza karaktera (string) iako to nigde nije naznačeno. Za razliku od JS-a, TS
omogućava da se unapred definiše kog će tipa podatka biti neka varijabla: var myName:string
= "Nemanja".
Osnovni tip podatka od koga “potiču” svi ostali tipovi jeste any. Posle toga imamo neke
“ugrađene” (built-in) tipove podataka kao što su:
boolean (logička vrednost, true ili false)
number (brojevne vrednost, bilo celobrojne bilo sa decimalnim zapisom)
string (sekvenca Unicode karaktera)
void (za funkcije koje ne vraćaju vrednost)
null (“namerno odsustvo” vrednosti objekta)
undefined (vrednost neinicijalizovanih varijabli)
Pored ovih osnovnih tipova koje TS nudi, imamo mogućnost i da kreiramo sopstvene tipove
kao i u svakom drugom objektno orijentisanom jeziku. To se može uraditi pomoću
enumeracija (enums), klasa (classes), interfejsa (interface), nizova (arrays)…
2.6.1 Boolean
Najjednostavniji tip podatka, uzima vrednost true ili false, npr. u TS-u se definiše:
let isDone: boolean = false;
2.6.2 Number
Kao i kod JS-a, i kod TS-a brojevi (number) su decimalni brojevi (floating point values), a pored
decimalnih i heksadecimalnih, TS podržava i binarne i oktalne brojeve, koji su u JS uvedeni u
verziji ECMAScript2015, npr.
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
2.6.3 String
Kao i kod drugih programskih jezika, string je tekstualni tip podatka, a TS, kao i JS, koristi
dvostruke i jednostruke znake navoda, npr.
let color: string = "blue";
color = 'red';
Takođe se mogu koristiti i tzv. Template strings, koji mogu sadržati više redova teksta i
ugrađene izraze. Takvi stringovi se uokviruju znacima ` (backtick/backquote), dok se ugrađeni
izrazi navode u formi ${ expressionName }. Npr.
let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ fullName }.
Ako se slučajno pokuša pristupiti elementu niza koji ne postoji, koristi se union tip:
x[3] = "world"; // OK, 'string' can be assigned to 'string |
number'
console.log(x[5].toString());// OK, 'string' and 'number' both have 'toString'
x[6] = true; // Error, 'boolean' isn't 'string | number'
2.6.6 Enum
Dodatak standardnim tipovima podataka iz JS-a, omogućava, kao npr. kod C#, dodelu
smislenijih naziva brojčanim vrednostima, npr.
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
Podrazumevano se navedenim nazivima dodelјuju brojne vrednosti počevši od broja 0, ali se
može početi i od druge vrednosti, kao npr.
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
ili se zadati svaka vrednost posebno:
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;
Ovde se ne završava pogodnost korišćenja ovog tipa podatka. Ako ne znamo koji naziv je
dodelјen određenom broju, možemo to otkriti na osnovu tog broja:
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
alert(colorName); // Displays 'Green' as its value is 2 above
2.6.7 Any
Kod JS-a je moguće određenoj promenlјivoj dodeliti vrednost drugog tipa podatka u odnosu
na inicijalno dodelјenu, pa se postavlјa pitanje kako to uraditi kod TS-a? Za to se koristi tip
podatka any, čime se ta promenlјiva izostavlјa iz provere tipova podataka, kao npr.
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
Takođe se može koristiti npr. za liste kod kojih nismo sigurni kog tipa su neki članovi:
let list: any[] = [1, true, "free"];
list[1] = 100;
2.6.8 Void
Koristi se za podatke koji nemaju dodelјen nikakav tip, a najčešće se mogu videti kod funkcija
koje ne vraćaju nikakvu vrednost (a kod TS-a se i za takve funkcije mora zadati tip), kao npr.
function warnUser(): void {
alert("This is my warning message");
}
Nema smisla za promenlјive dodelјivati tip void, jer se takvim promenlјivim mogu dodeliti
samo vrednosti undefined i null.
2.6.9 Null i Undefined
Vrednosti null i undefined su takođe tipovi podataka istog naziva kao i te vrednosti, ali nema
mnogo smisla, kao i kod void, koristiti ih same za sebe:
// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;
Međutim, ovde dve vrednosti su podtipovi svih ostalih tipova podataka, pa se null i undefined
mogu dodeliti kao vrednosti promenlјivoj bilo kog tipa (npr. promenlјivoj tipa number).
Međutim, ako se koristi --strictNullChecks svič za proveru tipova, tada se ove vrednosti mogu
dodeliti samo void i njemu odgovarajućih tipova promenlјivih.
2.6.10 Never
Ovo je tip podatka čija se vrednosti nikada ne pojavlјuje, npr. never je tip funkcije koja uvek
izbacuje exception ili se nikad ne vraća.
Ovaj tip je podtip i može se dodeliti bilo kom tipu promenlјive, međutim nijedan drugi tip nije
podtip niti se može dodeliti ovom tipu promenlјive. Primer:
// Function returning never must have unreachable end point
function error(message: string): never {
throw new Error(message);
}
2.7 Varijable
Osnovna sintaksa u TS-u za varijable izgleda ovako:
var naziv_varijable : tip_podatka = vrednost;
U JS-u sve je isto osim što nema dodelјivanja tipa podatka. Naravno, na primeru iznad moguće
je dodeliti vrednost kasnije a u TS kao što je već rečeno može se pisati i običan JS pa i tip
podatka nije obavezan.
Napomena: sa novim ecma script-om (ES 2017) umesto var koriste se i let i const.
2.8 Operatori
Ovo je jedna od brojnih oblasti koja je zajednička i za typescript i za javascript. Postoji nekoliko
vrsta operatora:
aritmetički: sabiranje (+), oduzimanje (-), množenje (*), delјenje (/), delјenje sa
ostatkom (%), povećanje (++), smanjenje (--)
primer:
var a = 5;
var b = 10;
var c = a + b;
relacioni: veće od (>), manje od (<), veće ili jednako (>=), manje ili jednako (<=),
jednakost (==), nejednakost (!=)
primer:
var a = 5;
var b = 10;
var c = a == b;
logički: i (&&), ili (||) i ne (!)
primer:
var a = 5;
var b = 10;
var c = a == b || a < b;
Postoje još neki operatori kao što su bitwise, operatori dodele i ostali operatori ali oni
zahtevaju naprednije znanje programskih jezika koji su tema ove priče pa ćemo ih
zasad preskočiti (detalјnije se može pročitati ovde)
2.9 Prednosti i nedostaci korišćenja TS-a
Kao i kod svakog drugog programskog jezika, i korišćenje TS-a ima svoje prednosti i mane.
Neke od najvažnijih prednosti su:
Objektno-orijentisan pristup, tj. TS je u potpunosti OOP;
Nije potreban runtime dodatak veb pregledaču, jer se sav kod prevodi u standardni JS
kod koji veb pregledač može da pročita;
Backend programerima je olakšan rad, jer u običnom JS implementacija naprednih
koncepata je teško razumlјiva i takav kod je veoma težak za čitanje i analizu;
Koristi se u popularnim softverskim okvirima (frameworks), kao što je npr. Angular 13.
Pored prednosti, postoje, naravno, i nedostaci, kao što su:
Frontend razvoj je prezasićen svim vrstama softverskih okvira i tehnologija, koje je
teško pratiti i učiti. Iako je TS stekao određenu popularnost, ne znaju ga svi JS
developeri, tako da timski rad po tom pitanju može biti teži.
Razvojna okruženja i editori moraju imati podršku za prepoznavanje sintakse i
konverziju u JS.
CMS-ovi mogu praviti problem ako hoćete da izmenite JS kod direktno iz
administratorskog panela, što nije problem ako postoji dodatak za konverziju TS u JS
format, a izmena se vrši u TS fajlu. U suprotnom, ako se izmene vrše na JS fajlu, kasnije
izmene i ažuriranje od strane developera će poništiti te izmene.
Česte nadogradnje jezika (aktuelna verzija 2.2.3), što ne pravi problem samo onima
koji uče taj jezik, već može biti problem za primenu nove verzije jezika na starije
projekte.
2.10 TS kompajler
TS kompajler (ili transpiler, kako ga neki zovu) ima zadatak da izvrši određene provere u našem
TS kodu i konvertuje ga u validan JS format. Kompajler se sastoji iz više različitih delova (kao
npr. Parser, Binder, Type Resolver/Checker, Emitter, Pre-processor).
Koristićemo standardan TS kompajler, koji se preko konzole poziva komandom tsc, a kao
argument se navodi .ts fajl i kao rezultat se dobija .js fajl.
Ako imamo instaliran node.js zajedno za npm, (node package manager), tsc se instalira
sledećom komandom na konzoli:
npm install -g typescript
Nakon instalacije proveravamo verziju tsc-a komandom:
tsc -v
Osnovni primeri i postupak dati su ovde.
Primeri iz kojih se može videti razlika sa standardnim JS-om možete pogledati npr. u knjizi Yet
Another TypeScript Book.