Middle
TypeScriptda qanday hollarda turlarni, qanday hollarda interfeyslarni ishlatish kerak?
sobes.tech AI
AIdan javob
Turlar (type) niyatlash uchun:
- Birliklar (unions) va kesishmalar (intersections):
type Status = "pending" | "completed" | "failed"; type UserWithAddress = User & Address; - Asosiy turlar va litralar:
type ID = string | number; type Direction = "up" | "down" | "left" | "right"; - Tuples:
type RgbColor = [number, number, number]; - Mavjud turlar uchun aliaslar yaratish:
type StringOrNumber = string | number; - Shartli turlar:
type TypeOfProp<T, K extends keyof T> = T[K];
Interfeyslar (interface) uchun:
- Obyekt tuzilmasini tasvirlash:
interface User { id: number; name: string; age?: number; // Ixtiyoriy xususiyat } - Klasslar bilan amalga oshirish (implements):
interface Logger { log(message: string): void; } class ConsoleLogger implements Logger { log(message: string) { console.log(message); } } - Boshqa interfeyslarni kengaytirish (extends):
interface Person { name: string; } interface Employee extends Person { employeeId: number; } - Deklarativ birlashma (declaration merging): Bu mavjud interfeysni yana e'lon qilib kengaytirishga imkon beradi. Turlar uchun bu mumkin emas.
interface Box { width: number; } interface Box { // Bu Box interfeysiga height xususiyatini qo'shadi height: number; }
Qisqa taqqoslash:
| Xususiyat | type |
interface |
|---|---|---|
| Birlik turlari | Ha | Yo'q |
| Kesişme turlari | Ha | Yo'q |
| Asosiy turlar/literal'lar | Ha | Yo'q |
| Tuple'lar | Ha | Yo'q |
| Turlar uchun aliaslar | Ha | Yo'q |
| Shartli turlar | Ha | Yo'q |
| Obyekt ta'rifi | Ha | Ha |
| Klasslar bilan amalga oshirish | Yo'q | Ha |
| Kengaytirish | Ha (& bilan) |
Ha (extends bilan) |
| Deklarativ birlashma | Yo'q | Ha |
Umuman olganda, obyekt tuzilmasini ta'riflash uchun interface ishlatish ma'qul, chunki ular ob'ektga yo'naltirilgan yondashuvga mos keladi va deklarativ birlashishni qo'llab-quvvatlaydi. Boshqa barcha holatlar uchun, ayniqsa, mavjud turlarni birlashtirish va yangi turlar yaratish uchun, type ko'proq mos keladi.