TypeScript maxsus tiplar
TypeScript turi tizimida o‘ziga xos xatti-harakatlarga ega bo‘lgan bir nechta maxsus turlarni o‘z ichiga oladi.
Ushbu turlar turini oldindan noma’lum bo‘lishi mumkin bo‘lgan yoki JavaScript ibtidoiylari bilan turdagi xavfsiz tarzda ishlashingiz kerak bo‘lgan holatlarni hal qilish uchun turli stsenariylarda qo‘llaniladi.
Eslatma: Ushbu maxsus turlar TypeScript turi tizimining bir qismi bo‘lib, kodingizni yanada xavfsizroq va o‘z-o‘zidan hujjatlashtirishga yordam beradi.
Turi: har qanday
any turi TypeScript-dagi eng moslashuvchan tur hisoblanadi.
U asosan kompilyatorga ma’lum bir o‘zgaruvchining turini tekshirishni o‘tkazib yuborishni aytadi.
Bu ma’lum vaziyatlarda foydali bo‘lishi mumkin bo‘lsa-da, u TypeScript tipidagi xavfsizlik xususiyatlarini chetlab o‘tgani uchun juda kam ishlatilishi kerak.
any’dan qachon foydalanish kerak:
- JavaScript kodini TypeScript-ga ko‘chirishda
- Turi noma’lum bo‘lgan dinamik kontent bilan ishlashda
- Muayyan holat uchun turdagi tekshiruvdan voz kechishingiz kerak bo‘lganda
Quyidagi misolda any ishlatilmaydi va xatolik yuzaga keladi:
anysiz misol
let u = true;
u = "string"; // Error: Type 'string' is not assignable to type 'boolean'.
Math.round(u); // Error: Argument of type 'boolean' is not assignable to parameter of type 'number'.
O‘zingiz sinab ko‘ring »
O‘zgaruvchini any maxsus turiga o‘rnatish tur tekshiruvini o‘chirib qo‘yadi:
any bilan misol
let v: any = true;
v = "string"; // no error as it can be "any" type
Math.round(v); // no error as it can be "any" type
O‘zingiz sinab ko‘ring »
any oldingi xatolarni olishning foydali usuli bo‘lishi mumkin, chunki u tipni tekshirishni o‘chirib qo‘yadi, lekin
TypeScript turi xavfsizligini va unga tayanadigan vositalarni ta’minlay olmaydi
avtomatik yakunlash kabi turdagi ma’lumotlarda ishlamaydi.
Esingizda bo‘lsin, "har qanday holatda" undan qochish kerak ...
Turi: noma’lum
unknown turi any ning turdagi xavfsiz o‘xshashidir.
Bu "bu har qanday narsa bo‘lishi mumkin, shuning uchun uni ishlatishdan oldin qandaydir tekshirishni amalga oshirishingiz kerak" deyishning xavfsiz usuli.
Key differences between unknown and any:
unknownishlatishdan oldin turi tekshirilishi kerak- Siz
unknownturidagi xususiyatlarga tur tasdiqisiz kira olmaysiz - Siz
unknownturdagi qiymatlarni chaqira olmaysiz yoki tuza olmaysiz
TypeScript quyidagi misolda ko‘rsatilganidek, unknown turlaridan to‘g‘ri tur tekshiruvisiz foydalanishni oldini oladi:
Misol
let w: unknown = 1;
w = "string"; // no error
w = {
runANonExistentMethod: () => {
console.log("I think therefore I am");
}
} as { runANonExistentMethod: () => void}
// How can we avoid the error for the code commented out below when we don't know the type?
// w.runANonExistentMethod(); // Error: Object is of type 'unknown'.
if(typeof w === 'object' && w !== null) {
(w as { runANonExistentMethod: Function }).runANonExistentMethod();
}
// Although we have to cast multiple times we can do a check in the if to secure our type and have a safer casting
O‘zingiz sinab ko‘ring »
unknown’dan qachon foydalanish kerak:
- Tashqi manbalardan olingan ma’lumotlar bilan ishlaganda (API’lar, foydalanuvchi kiritgan ma’lumotlar va h.k.)
- Moslashuvchanlikka ruxsat bergan holda, turdagi xavfsizlikni ta’minlashni istasangiz
- JavaScript-dan TypeScript-ga xavfsiz tarzda o‘tishda
Type narrowing with unknown:
Siz unknown qiymatining turini himoya vositalaridan foydalanib qisqartirishingiz mumkin:
function processValue(value: unknown) {
if (typeof value === 'string') {
// value is now treated as string
console.log(value.toUpperCase());
} else if (Array.isArray(value)) {
// value is now treated as any[]
console.log(value.length);
}
}
Turi: hech qachon
never turi hech qachon yuzaga kelmaydigan qiymatlar turini ifodalaydi.
Bu narsa hech qachon sodir bo‘lmasligi yoki hech qachon bo‘lmasligi kerakligini ko‘rsatish uchun ishlatiladi.
never uchun keng tarqalgan qo‘llanish holatlari:
- Hech qachon yakunlanmaydigan funksiyalar (har doim xatolik tashlaydigan yoki cheksiz siklga kiradigan)
- Turni tekshirishdan hech qachon o‘tmaydigan turdagi himoyachilar
- Diskriminatsiyalangan kasaba uyushmalarida to‘liqlikni tekshirish
Amalda never misollari:
1. Hech qachon qaytmaydigan funksiya
function throwError(message: string): never {
throw new Error(message);
}
2. Diskriminatsiyalangan kasaba uyushmalari bilan to‘liqlikni tekshirish
type Shape = Circle | Square | Triangle;
function getArea(shape: Shape): number {
switch (shape.kind) {
case 'circle':
return Math.PI * shape.radius ** 2;
case 'square':
return shape.sideLength ** 2;
default:
// TypeScript knows this should never happen
const _exhaustiveCheck: never = shape;
return _exhaustiveCheck;
}
}
3. Basic never type (throws error when assigned)
let x: never = true; // Error: Type 'boolean' is not assignable to type 'never'.
O‘zingiz sinab ko‘ring »
never’dan qachon foydalanish kerak:
- Hech qachon qiymat qaytarmaydigan funksiyalar uchun
- Hech qachon mos kelmasligi kerak bo‘lgan turdagi qo‘riqchilarda
- switch operatorilarida to‘liq turdagi tekshirish uchun
- Umumiy turlarda ba’zi holatlarni ko‘rsatish mumkin emas
Turi: aniqlanmagan va null
TypeScript da undefined va null ham xuddi string yoki number kabi o‘z turlariga ega.
Odatiy bo‘lib, bu turlar boshqa har qanday turga tayinlanishi mumkin, ammo bu TypeScript-ning qat’iy null tekshiruvlari bilan o‘zgartirilishi mumkin.
Key points about undefined and null:
undefinedo‘zgaruvchi e’lon qilingan, lekin qiymat tayinlanmaganligini bildiradinull- bu hech qanday qiymat yoki obyektni bildirmaydigan aniq topshiriq- TypeScript-da ikkalasining ham o‘z turlari mavjud: mos ravishda
undefinedvanull strictNullChecksyoqilgan bo‘lsa, siz ushbu turlarni aniq ishlatishingiz kerak
Asosiy foydalanish
let y: undefined = undefined;
let z: null = null;
O‘zingiz sinab ko‘ring »
Ixtiyoriy parametrlar va xususiyatlar
// Optional parameter (implicitly `string | undefined`)
function greet(name?: string) {
return `Hello, ${name || 'stranger'}`;
}
// Optional property in an interface
interface User {
name: string;
age?: number; // Same as `number | undefined`
}
Nullish Coalescing va ixtiyoriy zanjir
// Nullish coalescing (??) - only uses default if value is null or undefined
const value = input ?? 'default';
// Optional chaining (?.) - safely access nested properties
const street = user?.address?.street;
Important: Ushbu turlar tsconfig.json faylingizda strictNullChecks yoqilganda eng foydali hisoblanadi.
Bu null va undefined faqat o‘zlariga va any ga tayinlanishini ta’minlaydi.
Qattiq null cheklarni yoqish uchun buni tsconfig.json ga qo‘shing:
{
"compilerOptions": {
"strictNullChecks": true
}
}
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
