TypeScript nima?
Agar siz JavaScript'ni yaxshi bilsangiz, TypeScript (qisqacha TS) o'rganish sizga oson bo'ladi. Chunki TypeScript โ bu mutlaqo yangi til emas. U aynan JavaScript'ning ustiga qurilgan: JS'ning barcha imkoniyatlarini saqlab qoladi va ustiga bitta katta qo'shimcha beradi โ statik turlar tizimi (static type system). Ushbu bobda biz JavaScript'ni bilgan holda TypeScript'ni tez o'zlashtirishga harakat qilamiz.
TypeScript โ JavaScript'ning "kengaytmasi"
TypeScript'ni ko'pincha "JavaScript ustiga turlar qo'shadigan til" deb ta'riflashadi. Bu ta'rifni to'g'ri tushunish muhim:
- Har qanday to'g'ri (valid) JavaScript kodi โ bir vaqtning o'zida to'g'ri TypeScript kodi hamdir. Ya'ni TS โ JS'ning ustki to'plami (superset);
- TypeScript'ga siz tur izohlari (type annotations) qo'shasiz โ o'zgaruvchi, funksiya parametri yoki qaytish qiymati qanday turda bo'lishini yozib qo'yasiz;
- Brauzer yoki Node.js TypeScript'ni to'g'ridan-to'g'ri tushunmaydi. TS kodi avval oddiy JavaScript'ga kompilyatsiya (aylantirish) qilinadi, so'ng ishga tushadi.
Oddiy JavaScript'da o'zgaruvchi turi haqida hech narsa yozmaymiz:
// JavaScript
let message = "Salom";
message = 42; // JS uchun bu mutlaqo normal
TypeScript'da esa turni ochiq belgilashimiz mumkin. Endi noto'g'ri turni berishga urinsak, kompilyator xatoni ko'rsatadi:
// TypeScript
let message: string = "Salom";
message = 42;
// Xato: Type 'number' is not assignable to type 'string'.
Nega TypeScript kerak?
JavaScript โ dinamik turli (dynamically typed) til. Bu qulay, lekin katta loyihalarda muammolar keltirib chiqaradi. Xatolar ko'pincha faqat dastur ishga tushganda, ba'zan esa foydalanuvchi qo'lida sezilib qoladi. TypeScript quyidagi muammolarni hal qiladi:
- Xatoni erta topish. Turlar mos kelmasligi, mavjud bo'lmagan xossaga murojaat, funksiyaga noto'g'ri argument โ bularning barchasi kompilyatsiya bosqichida aniqlanadi, ishga tushmasdan oldin;
- IDE yordami. Turlar aniq bo'lgani uchun tahririy avtomatik to'ldirish (autocomplete), xossalar ro'yxati va aniq maslahatlarni ko'rsatadi;
- Hujjat vazifasini bajaradi. Tur izohlari kodning o'zi qanday ma'lumot kutayotganini aniq ko'rsatadi โ alohida izoh yozish shart emas;
- Ishonchli refaktoring. Nom o'zgartirilganda yoki tuzilma o'zgarganda kompilyator buzilgan barcha joylarni ko'rsatadi.
Klassik misol โ funksiyaga noto'g'ri tur uzatish. JavaScript'da bu jimgina noto'g'ri natija beradi:
function summa(a: number, b: number): number {
return a + b;
}
summa(2, 3); // 5 โ to'g'ri
summa("2", "3"); // Xato: Argument of type 'string'
// is not assignable to parameter of type 'number'.
JavaScript'da summa("2", "3") hech qanday xatosiz "23" qaytarardi โ bu esa yashirin nosozlik. TypeScript esa buni darrov ushlaydi.
TypeScript'ni o'rnatish
TypeScript'ni Node.js va npm orqali o'rnatamiz. Uni butun tizim bo'ylab (global) o'rnatish eng oson yo'l:
npm install -g typescript
O'rnatilganini tekshirish uchun versiyani so'raymiz. Bu buyruq tsc (TypeScript Compiler) dasturi ishlayotganini bildiradi:
tsc --version
// Version 5.x.x
Aksariyat loyihalarda TypeScript'ni global emas, balki loyihaning o'ziga (local) o'rnatish afzalroq. Shunda jamoaning har bir a'zosi bir xil versiyadan foydalanadi:
npm install --save-dev typescript
// keyin: npx tsc --version
tsc โ bu TypeScript Compiler. Uning yagona vazifasi: .ts fayllarni o'qib, ulardan oddiy .js fayllar yasab berish.Birinchi .ts fayl va kompilyatsiya
TypeScript kodi .ts kengaytmali fayllarda yoziladi (JS'da .js bo'lgani kabi). Keling, salom.ts nomli fayl yaratamiz:
// salom.ts
function salomBer(ism: string): string {
return "Salom, " + ism + "!";
}
console.log(salomBer("Ali"));
Bu faylni ishga tushira olmaymiz โ Node.js .tsni tushunmaydi. Avval uni kompilyatsiya qilamiz:
tsc salom.ts
Bu buyruq yonida salom.js faylini yasaydi. Uning ichida turlar butunlay olib tashlangan, sof JavaScript qoladi:
// salom.js (natija)
function salomBer(ism) {
return "Salom, " + ism + "!";
}
console.log(salomBer("Ali"));
Endi bu oddiy JS faylni Node.js orqali ishga tushiramiz:
node salom.js
// Salom, Ali!
Kompilyatsiya jarayonini tushunish
TypeScript'ning ish tartibi ikki asosiy bosqichdan iborat. Buni tushunish TS bilan ishlashda muhim:
- Tur tekshiruvi (type checking): kompilyator turlar to'g'ri ishlatilganini tekshiradi. Xato topsa, sizga xabar beradi;
- Turlarni o'chirish (type erasure): tekshiruvdan so'ng barcha tur izohlari olib tashlanadi va sof JavaScript hosil bo'ladi.
Ya'ni turlar faqat dasturchi uchun va kompilyator uchun mavjud. Tayyor JS kodda ular umuman yo'q โ bu "turlarni o'chirish" deb ataladi.
.js faylni yaratib beradi. Ya'ni xato kodni ham "ishlaydigan" JS'ga aylantiradi. Bunday xatti-harakatni noEmitOnError sozlamasi bilan o'chirish mumkin (bu haqda oxirgi darsda gaplashamiz).Kuzatuv rejimi (watch mode)
Har safar qo'lda tsc yozish noqulay. TypeScript o'zgarishlarni avtomatik kuzatib, faylni har o'zgartirganingizda qayta kompilyatsiya qila oladi. Buning uchun --watch (yoki -w) bayrog'i ishlatiladi:
tsc salom.ts --watch
Endi salom.tsni saqlaganingizda kompilyator darhol ishga tushadi va yangi salom.js yasaydi. Bu ishlab chiqish jarayonini ancha tezlashtiradi.
Xulosa
- TypeScript โ JavaScript ustiga statik turlarni qo'shadigan til; har qanday JS kodi ayni paytda TS kodi hamdir;
- Turlar xatoni erta topishga (ishga tushmasdan oldin) va IDE yordamini yaxshilashga xizmat qiladi;
- TS'ni
npm install -g typescriptorqali o'rnatamiz,tsckompilyatoridan foydalanamiz; .tsfayltscorqali oddiy.jsfaylga aylantiriladi โ turlar o'chiriladi, sof JS qoladi;- Turlar faqat kompilyatsiya paytida yashaydi; ishga tushishda hech qanday qo'shimcha xarajat bo'lmaydi;
--watchrejimi fayllarni avtomatik qayta kompilyatsiya qiladi.