TypeScript type va interface farqi
Oldingi darsda obyekt shakli type bilan e’lon qilindi. Boshqa kodlarda
xuddi shu ish interface bilan bajarilganini ko’rasiz.
Savol tabiiy: ikkalasi bir xil ishni qilsa, nega ikkita yozuv bor va qaysi birini tanlash kerak?
Ikkalasi ham bir xil natija beradi
type UserType = {
id: number;
name: string;
};
interface UserInterface {
id: number;
name: string;
}
const first: UserType = { id: 1, name: "Aziz" };
const second: UserInterface = { id: 2, name: "Malika" };
console.log(first.name, second.name);
Aziz Malika
Ikki yozuvdagi farqlarni sanang: type da tenglik belgisi bor va
oxirida nuqtali vergul qo’yiladi, interface da esa ikkalasi ham yo’q.
Natija bir xil.
Farq 1: interface o’ziga o’zi qo’shiladi
Bitta interface ni ikki marta e’lon qilsangiz, TypeScript ularni
birlashtiradi:
interface Product {
title: string;
}
interface Product {
price: number;
}
const item: Product = { title: "Kitob", price: 45000 };
console.log(item);
{ title: 'Kitob', price: 45000 }
Ikkala maydon ham talab qilinadi. Bunga deklaratsiya birlashuvi deyiladi.
type bilan xuddi shunday qilsangiz, xato chiqadi:
type Product = { title: string };
type Product = { price: number };
example.ts(1,6): error TS2300: Duplicate identifier 'Product'.
example.ts(2,6): error TS2300: Duplicate identifier 'Product'.
Birlashuv aynan bitta joyda kerak bo’ladi: begona kutubxonaning tipini kengaytirish. Masalan Express’ning so’rov obyektiga o’z maydoningizni qo’shish.
Farq 2: type obyekt bo’lmagan tiplarni ham nomlaydi
interface faqat obyekt shakli uchun. type esa har qanday tipga nom
beradi:
type Identifier = string | number;
type Point = [number, number];
type Handler = (message: string) => void;
const code: Identifier = "A-12";
const position: Point = [41.31, 69.24];
console.log(code, position);
A-12 [ 41.31, 69.24 ]
Bu uchta e’lonni interface bilan yozib bo’lmaydi. Union, kortej va
funksiya tipi — faqat type ning ishi.
Farq 3: kengaytirish yozuvi boshqacha
Mavjud shaklga maydon qo’shish ikkalasida ham mumkin, lekin yozuv farq qiladi.
interface da extends ishlatiladi:
interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
const dog: Dog = { name: "Rex", breed: "husky" };
console.log(`${dog.name} — ${dog.breed}`);
Rex — husky
type da & belgisi ishlatiladi:
type Point = { x: number; y: number };
type Point3D = Point & { z: number };
const position: Point3D = { x: 1, y: 2, z: 3 };
console.log(position);
{ x: 1, y: 2, z: 3 }
Natija amalda bir xil, yozuv boshqacha.
Jamlangan taqqoslash
| Imkoniyat | type |
interface |
|---|---|---|
| Obyekt shakli | ✅ | ✅ |
Union (string | number) |
✅ | ❌ |
| Kortej va funksiya tipi | ✅ | ❌ |
| Kengaytirish | & bilan |
extends bilan |
| Ikki marta e’lon qilish | Xato beradi | Birlashadi |
Sinf bilan implements |
✅ | ✅ |
Qaysi birini tanlash
Amalda ishlaydigan qoida:
- Sukut bo’yicha
typeishlating. U hamma narsani qila oladi: obyekt ham, union ham, kortej ham. Bitta kalit so’z yetadi. - Begona kutubxona tipini kengaytirish kerak bo’lsa
interfacetanlang. Deklaratsiya birlashuvi aynan shu holat uchun. - Loyihada allaqachon bitta uslub bor bo’lsa, unga amal qiling. Izchillik tanlovdan muhimroq.
Sinflar bilan ishlatish
Ikkalasi ham sinf shaklini belgilashi mumkin:
interface Greeter {
greet(): string;
}
class Student implements Greeter {
private name: string;
constructor(name: string) {
this.name = name;
}
greet(): string {
return `Salom, men ${this.name}`;
}
}
const student = new Student("Aziz");
console.log(student.greet());
Salom, men Aziz
implements — “bu sinf shu shaklga mos keladi” degani. Sinf greet
metodini yozmasa, xato chiqadi.
Klasslar darsidagi sintaksis o’zgarmagan,
faqat shakl talabi qo’shildi. private — TypeScript qo’shgan belgi:
maydonga sinf tashqarisidan murojaat qilinmasligini bildiradi.
Amaliy mashq
- Bir xil
Articleshaklini avvaltype, keyininterfacebilan e’lon qiling va ikkalasi ishlashini tekshiring; typeni ikki marta e’lon qilib,TS2300xato xabarini o’qing;- Xuddi shuni
interfacebilan takrorlang va xato chiqmasligini, maydonlar birlashishini kuzating; string | numberunion tipiniinterfacebilan yozishga urinib ko’ring va nima uchun imkonsizligini aytib bering;interfacedaextends,typeda&bilan bir xil kengaytirishni bajaring;- O’z loyihangiz uchun qaysi uslubni tanlashingizni bitta jumla bilan asoslang.
3-qadam eng muhimi: deklaratsiya birlashuvi jim sodir bo’ladi va katta loyihada chalkashlik manbai bo’lishi mumkin.
Qisqacha xulosa
typevainterfaceobyekt shaklini bir xil tavsiflaydi.typeko’proq narsa qila oladi: union, kortej va funksiya tipi faqat unda yoziladi.interfaceikki marta e’lon qilinsa birlashadi,typeesaTS2300xatosini beradi.- Kengaytirish:
interfacedaextends,typeda&. - Sukut bo’yicha
typetanlang; begona kutubxona tipini kengaytirish kerak bo’lsainterface. - Loyihada bitta uslubga amal qiling — izchillik tanlovdan muhimroq.
Keyingi darsda funksiya tiplari — parametr, qaytish qiymati va ixtiyoriy argumentlar.