TypeScript

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:

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'.
Diqqat qiling: bu xato kod ishga tushmasdan oldin, ya'ni yozayotgan paytingizda tahririyingiz (IDE) ichida chiqadi. Bu TypeScript'ning asosiy ustunligi.

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:

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 ishga tushish paytida (runtime) hech qanday tekshiruv qo'shmaydi. Barcha tekshiruv kompilyatsiya bosqichida bo'ladi. Shuning uchun TS kodi tayyor JS'dan sekinroq ishlamaydi.

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:

  1. Tur tekshiruvi (type checking): kompilyator turlar to'g'ri ishlatilganini tekshiradi. Xato topsa, sizga xabar beradi;
  2. 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.

Muhim nozik jihat: standart holatda TypeScript tur xatosi bo'lsa ham, baribir .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