TypeScript: never, void, any va unknown farqi

Assalamu Alaykum hammaga bugun mashhur interview savoli never , void , any va unknown type farqlari nimadaligini bilib olamiz . Qani boshladik ;) .

JavaScript & TypeScript

Xo'sh birinchi o'rinda bizga typelar nimaga kerakligi va typescript haqida gaplashsak .JavaScript dynamic typeli til bo'lganligi yani siz yaratagan o'zgaruvchilarga ularning tipini bera olmaysiz va bu ko'p hollarda dasturni ishlashida bir xatoliklar keltirib chiqaradi masalan siz satrni raqam sifatida ishlatib ketishingiz mumkin.Buning oldini olish uchun Javascript o'rniga Typescript dasturlash tili chiqarilgan bu dasturni ishlab chiqish jarayonida dasturchilarga xatolarni oldindan bilib ularni to'g'rilash imkoniyatini beradi.Bunda esa unga javascript bilan bir xillik hamda qo'shimcha typelar yordam beradi.

Endi Typescriptdagi bazi tiplar haqida gaplashamiz !!

never, unknown va any
never, unknown va any

Never tipi

Never — bu hech qachon hosil bo`lmaydigan qiymatlarning tipi hisoblanadi.

Bu nima degani bu agar siz never tipini ishlatsangiz bu dastur ishlashi jarayonida bunaqa tip hosil bo'lmaydi .Masalan doim xato qaytaradigan funksiyalar yoki doimiy aylanadigan looplik funksiyalar .

// 1) Doim xato qaytaradigan funksiya → tipi `never`
function throwError(message: string): never {
  throw new Error(message);
}

// `throwError` `never` qaytargani uchun, uni chaqiruvchi bu funksiyaning
// qaytish tipi ham avtomatik `never` bo'ladi (annotatsiya shart emas).
function fail() {
  return throwError('Server quladi');
}

// 2) Hech qachon tugamaydigan funksiya → ham `never`
function infiniteLoop(): never {
  while (true) {}
}

Never va funksiyadagi void tipi bir biridan farqli bo'lib void tipiga null yoki undefined qiymatlarini bersa bo'ladi . Typescriptda void funksiyalari default undefined tip qaytaradi .

let something: void = null; // Valid
let nothing: never = null; // Error: Type 'null' is not assignable to type 'never'

never tipini hamma tiplik o'zgaruvchilarga bersak bo'ladi ammo birorta tiplik o'zgaruvchini never tiplik o'zgaruvchiga to'g'ridan to'g'ri berib(never tipining o'zidan tashqari) bo'lmaydi hattoki any tipini ham.

let a:number = 2
let b:never 
a=b //valid
b=a // type error

Unknown tipi

Unknown — bu any tipining xavfsiz tiplik ko'rinishi bo'lib .Va unda u biror boshqa tipga o'zgartirilmaguncha hech qaysi amalni bajara olmaysiz.

function f1(a: any) {
  a.b(); // OK
}

function f2(a: unknown) {
  // Error: Property 'b' does not exist on type 'unknown'.
  a.b();
}

Unknown tipiga hamma tipni bersa bo'ladi lekin unknown tipini faqatgina unknown va any tipiga bersa bo'ladi.

Any tipi

Any — bu qachonki biz Typescript tiplarga tekshirib error qaytarmasligini xohlasak ishlatamiz.

Any tipining ishlatganda biz Typescriptning ishlatishdagi qulayliklardan shunchaki voz kechamiz.Undan xohlagan propertyni chaqirib olib ishlatishimiz mumkin .

let obj: any = { x: 0 };
// None of the following lines of code will throw compiler errors.
// Using `any` disables all further type checking, and it is assumed
// you know the environment better than TypeScript.
obj.foo();
obj();
obj.bar = 100;
obj = "hello";
const n: number = obj;

Xulosa

Xulosa qilib aytadigan bo'lsak never tipini faqat error qaytaradigan yoki to'xtamaydigan looplik funksiyalarga ishlatilinadi , unknown tipini esa siz aniq bimaydigan lekin keyinchalik berilgan qiymatning tipinin olib ketadigan o'zgaruvchilarga ishlatish mumkin.Any tipini esa tiplardan zerikkanda ishlatsa bo'laveradi ;).

E’tiboringiz uchun rahmat !!!

Kamchiliklar uchun oldindan rahmat .