1-bo‘lim

TypeScript nima?

TypeScript qanday muammoni hal qiladi, u qanday paydo bo'lgan va turlar ishga tushirish paytida nima bo'ladi.

🕑 15 daqiqa o‘qish 📄 855 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Muammo
  2. Yechim
  3. Chiqish kodi
  4. TypeScript qanday paydo bo'ldi?
  5. Turlar ishga tushirishda yo'q
  6. Ishga tushirish
  7. Tur xulosasi - hamma joyga yozish shart emas
  8. Nima yutamiz va nima yo'qotamiz?
  9. Versiyalar
  10. Xulosa

JavaScript sizga ishonadi. Siz sonni kutgan joyga matn bersangiz, u e'tiroz bildirmaydi - shunchaki ishlayveradi va natija kutilmagan bo'lib chiqadi.

TypeScript aynan shu ishonchni tekshirib beradi.

Muammo #

Dokon uchun chegirma hisoblaydigan oddiy funksiya:

JavaScript
function chegirma(narx, foiz) {
  return narx - narx * foiz / 100;
}

console.log(chegirma(10000, 20));
console.log(chegirma("10000", 20));
console.log(chegirma(10000));

Uchala chaqiruv ham ishlaydi. Natijaga qarang:

Terminal
node narx.js
Natija
8000
8000
NaN

Ikkinchi qator tasodifan to'g'ri chiqdi - JavaScript "10000" matnini songa aylantirdi. Uchinchisi esa NaN berdi, chunki foiz berilmagan.

Hech qanday xato yo'q. Dastur ishladi va noto'g'ri natijani bemalol qaytardi.

Bu xato qayerda ushlanadi?

Eng yaxshi holatda - testda. O'rtacha holatda - hamkasbingiz kod ko'rigida payqaydi.

Eng yomon holatda esa mijoz payqaydi: hisobda NaN so'm deb yozilgan bo'ladi.

Xato qanchalik kech topilsa, tuzatish shuncha qimmat.

Yechim #

Xuddi shu kodni TypeScript da yozamiz - farq faqat ikki joyda qo'shilgan turlarda:

TS
function chegirma(narx: number, foiz: number): number {
  return narx - narx * foiz / 100;
}

console.log(chegirma(10000, 20));
console.log(chegirma("10000", 20));
console.log(chegirma(10000));

Endi kompilyatorga ko'rsatamiz:

Terminal
tsc narx.ts --noEmit 2>&1 | fold -sw 74
Natija
narx.ts(6,22): error TS2345: Argument of type 'string' is not assignable
to parameter of type 'number'.
narx.ts(7,13): error TS2554: Expected 2 arguments, but got 1.

Ikkala xato ham topildi - va dastur umuman ishga tushmadi.

E'tibor bering, xabar juda aniq: qaysi fayl, qaysi qator, qaysi ustun, qanday xato kodi va nima kutilgan edi.

QismMa'nosi
narx.ts(6,22)Fayl, 6-qator, 22-ustun
error TS2345Xato kodi - internetdan qidirish mumkin
Argument of type 'string'...Nima noto'g'ri ekanining tavsifi

--noEmit - "faqat tekshir, JavaScript fayl yaratma" degani.

Chiqish kodi #

Bu CI uchun muhim:

Terminal
tsc narx.ts --noEmit > xato.txt 2>&1
echo "kod: $?"
fold -sw 74 xato.txt
Natija
kod: 2
narx.ts(6,22): error TS2345: Argument of type 'string' is not assignable
to parameter of type 'number'.
narx.ts(7,13): error TS2554: Expected 2 arguments, but got 1.

Xato bo'lsa tsc nol bo'lmagan kod qaytaradi, demak qurish to'xtaydi. Xatosi yo'q faylda esa:

TS
function chegirma(narx: number, foiz: number): number {
  return narx - narx * foiz / 100;
}

console.log(chegirma(10000, 20));
Terminal
tsc narx2.ts --noEmit && echo "xato yo'q, kod: $?"
Natija
xato yo'q, kod: 0

TypeScript qanday paydo bo'ldi? #

Anders Hejlsberg - TypeScript ning bosh me'mori

2010-yillarga kelib JavaScript kichik skriptlar tilidan katta ilovalar tiliga aylandi. Microsoft ichida Office veb versiyasi kabi yuz minglab qatorli loyihalar paydo bo'ldi - va ularni JavaScript da saqlash qiyinlashdi.

Anders Hejlsberg bu ishga boshchilik qildi. U allaqachon Turbo Pascal, Delphi va C# ni yaratgan tajribali til dizayneri edi.

2012-yilning oktyabrida TypeScript ochiq kod sifatida e'lon qilindi. Uning asosiy g'oyasi g'ayrioddiy edi: yangi til yaratish emas, balki JavaScript ning ustiga qatlam qo'shish.

TypeScript tarixi 1995 JavaScript 10 kunda yozilgan 2009 Node.js JS serverga chiqdi 2012 TypeScript Microsoft, ochiq kod 2016 Angular 2 TS ni asosiy til qildi bugun standart React, Vue, Deno, Bun Asosiy qaror: yangi til emas, JavaScript ustiga qatlam. Shuning uchun har qanday .js fayl allaqachon to'g'ri TypeScript hisoblanadi.
TypeScript JavaScript ni almashtirmaydi - uni tekshiradi
Har qanday JavaScript - to'g'ri TypeScript

Bu shunchaki shior emas, balki tilning asosiy qoidasi.

Mavjud .js faylingizni .ts ga qayta nomlasangiz, u ishlashda davom etadi. Turlar esa asta-sekin qo'shiladi.

Aynan shu narsa katta loyihalarni bosqichma-bosqich ko'chirish imkonini beradi - 18-bobda buni amalda ko'ramiz.

Turlar ishga tushirishda yo'q #

Bu TypeScript ni tushunishdagi eng muhim nuqta.

Brauzer ham, Node.js ham TypeScript ni tushunmaydi. tsc kodni oddiy JavaScript ga aylantiradi va turlar shu paytda butunlay o'chib ketadi.

Manba fayl:

TS
type Mahsulot = { nomi: string; narx: number };
const m: Mahsulot = { nomi: "Olma", narx: 12000 };
console.log(m.nomi);

Uni kompilyatsiya qilib, natijaga qaraymiz:

Terminal
tsc yoqoladi.ts --target es2022 --module esnext --moduleResolution bundler
cat yoqoladi.js
Natija
const m = { nomi: "Olma", narx: 12000 };
console.log(m.nomi);

type Mahsulot ham, : Mahsulot ham natijada yo'q.

Turlar qachon mavjud? Yozish va qurish paytida Tahrirlovchi maslahat beradi tsc xatolarni topadi CI qurishni to'xtatadi Turlar BOR Ishga tushganda Brauzer oddiy JS ko'radi Hech qanday tekshiruv yo'q Tashqi ma'lumot tekshirilmaydi Turlar YO'Q Shuning uchun API javobini yoki foydalanuvchi kiritganini baribir qo'lda tekshirish kerak.
TypeScript kompilyatsiya vositasi, ish vaqti himoyasi emas
Turlar tashqi ma'lumotni tekshirmaydi

Bu eng ko'p uchraydigan noto'g'ri tushuncha.

Natija
const javob = await fetch("/api/mahsulot");
const m: Mahsulot = await javob.json();

Bu yerda : Mahsulot - shunchaki va'da. Server butunlay boshqa narsa qaytarsa, TypeScript hech narsa demaydi, chunki tekshiruv ish vaqtida umuman mavjud emas.

Tashqi ma'lumot uchun zod kabi ish vaqtida tekshiradigan kutubxona kerak - 16-bobda ko'ramiz.

Ishga tushirish #

Kompilyatsiya qilib, keyin node bilan ishga tushirish mumkin. Lekin ishlab chiqish paytida qulayroq yo'l bor - tsx TypeScript faylni to'g'ridan-to'g'ri bajaradi:

Terminal
tsx narx2.ts
Natija
8000

Oraliq .js fayl yaratilmadi.

Tur xulosasi - hamma joyga yozish shart emas #

TypeScript turni o'zi topadi:

TS
let nomi = "Olma";
nomi = 5;

Birinchi qatorda tur yozilmagan, lekin TypeScript nomi ni string deb biladi:

Terminal
tsc xulosa.ts --noEmit 2>&1 | fold -sw 74
Natija
xulosa.ts(2,1): error TS2322: Type 'number' is not assignable to type
'string'.

Shuning uchun TypeScript kodi odatda o'ylagandan ancha kam tur yozuvi bilan yoziladi. Buni 3-bobda batafsil ko'ramiz.

Nima yutamiz va nima yo'qotamiz? #

YutuqNarx
Xatolar ishga tushmasdan topiladiQurish qadami qo'shiladi
Tahrirlovchi aniq maslahat beradiO'rganishga vaqt kerak
Refaktoring xavfsiz bo'ladiTurlarni saqlab turish kerak
Kod o'zini hujjatlaydiBa'zan turlar murakkablashadi
Jamoada kelishuv aniq bo'ladiKutubxonaga @types kerak bo'lishi mumkin
Qachon TypeScript kerak emas?
  • Yigirma qatorli skript
  • Bir martalik tajriba
  • Jamoada hech kim bilmasa va o'rganishga vaqt bo'lmasa

Loyiha bir necha ming qatordan oshsa yoki unda bir nechta odam ishlasa, TypeScript deyarli har doim o'zini oqlaydi.

Versiyalar #

Bu darslikda ishlatilgan versiyalar:

Terminal
tsc --version
node --version
Natija
Version 5.7.3
v22.23.2

Xulosa #

  • JavaScript noto'g'ri turdagi qiymatni jim qabul qiladi - chegirma(10000) bizga NaN qaytardi va hech qanday xato bermadi.
  • TypeScript xuddi shu xatoni kod yozilayotganda topadi.
  • Xato xabari aniq: fayl, qator, ustun, xato kodi va tavsif.
  • tsc xato topsa nol bo'lmagan chiqish kodi qaytaradi - shuning uchun CI da qurish to'xtaydi.
  • TypeScript ni Anders Hejlsberg boshchiligida Microsoft yaratgan, 2012-yilda ochiq kod sifatida e'lon qilingan.
  • Asosiy qaror - yangi til emas, JavaScript ustiga qatlam: har qanday .js allaqachon to'g'ri TypeScript.
  • Turlar ishga tushirishda yo'qoladi - tsc oddiy JavaScript chiqaradi.
  • Demak TypeScript tashqi ma'lumotni (API javobi, foydalanuvchi kiritgani) tekshirmaydi.
  • --noEmit faqat tekshiradi; tsx esa faylni to'g'ridan-to'g'ri ishga tushiradi.
  • Tur xulosasi tufayli har joyga tur yozish shart emas.
Amaliy topshiriq
  1. chegirma funksiyasini JavaScript da yozing va uchta noto'g'ri argument bilan chaqiring.
  2. Uni .ts ga ko'chirib, turlarni qo'shing va tsc --noEmit bilan tekshiring.
  3. Xato xabaridagi qator va ustun raqamini kodda toping.
  4. echo $? bilan chiqish kodini tekshiring.
  5. Toza faylda chiqish kodi nol ekanini tasdiqlang.
  6. tsc bilan .js chiqarib, turlar yo'qolganini ko'ring.
  7. tsx bilan .ts faylni to'g'ridan-to'g'ri ishga tushiring.
  8. Tur yozmasdan o'zgaruvchi e'lon qilib, unga boshqa turdagi qiymat bering.
  9. Xato kodini (masalan TS2345) internetdan qidirib ko'ring.
  10. O'z loyihangizdan bitta faylni .ts ga ko'chirib, nechta xato chiqishini sanang.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.