JavaScriptda interfeyslarni nima bilan almashtirish mumkin?
sobes.tech AI
AIdan javob
JavaScriptda interfeyslar tabiiy ravishda qo'llab-quvvatlanmaydi, ammo ularni quyidagicha almashtirish mumkin:
-
Ish vaqtida turini tekshirish (Runtime type checking): Zod, Yup yoki Joi kabi kutubxonalar yordamida ma'lumotlar tuzilishini tavsiflash va kirish qiymatlarini tekshirish.
// Zod bilan misol import { z } from 'zod'; const UserSchema = z.object({ id: z.number(), name: z.string(), email: z.string().email(), }); try { const validUserData = UserSchema.parse({ id: 1, name: 'Alice', email: 'alice@example.com' }); console.log('Yaroqli foydalanuvchi maʼlumotlari:', validUserData); } catch (error) { console.error('Tekshirish xatosi:', error.errors); } -
JSDoc: IDElar va statik tahlilchilar uchun ma'lumot beradigan tur yozuvlari bilan sharhlar.
/** * @typedef {Object} Product * @property {number} id - Mahsulotning noyob identifikatori. * @property {string} name - Mahsulot nomi. * @property {number} price - Mahsulot narxi. */ /** * Mahsulot haqida ma'lumotlarni ko'rsatadi. * @param {Product} product - Mahsulot obyekti. */ function displayProduct(product) { console.log(`Mahsulot: ${product.name}, Narxi: ${product.price}`); } const myProduct = { id: 101, name: 'Kitob', price: 500 }; displayProduct(myProduct); -
Nomi va hujjatlarni belgilash bo'yicha kelishuvlar: Kod hujjatida tasvirlangan ob'ektlarning xususiyatlari va metodlariga qanday nom berilishi haqida aniq kelishuvlar.
-
TypeScript: Eng samarali usul bo'lib, rivojlanish jarayonida to'liq interfeyslar va statik turdagi tekshiruvlardan foydalanishga imkon beradi.
interface IProduct { id: number; name: string; price: number; displayInfo(): void; // Metod ta'rifi } class Book implements IProduct { id: number; name: string; price: number; constructor(id: number, name: string, price: number) { this.id = id; this.name = name; this.price = price; } displayInfo(): void { console.log(`Mahsulot: ${this.name}, Narxi: ${this.price}`); } } const myBook: IProduct = new Book(102, 'Roman', 700); myBook.displayInfo(); -
Abstrakt sinflar (bir oz): JavaScriptda haqiqiy abstrakt sinflar bo'lmasa-da, ularni xatoliklar chiqarish orqali emulyatsiya qilish mumkin, masalan, abstrakt sinf nusxasini yaratishga yoki "abstrakt" metodlarni chaqirishga urinish.
class AbstractShape { constructor() { if (new.target === AbstractShape) { throw new Error("AbstractShape abstrakt sinfining nusxasini yaratib bo'lmaydi"); } } area() { throw new Error("area metodi, subklassda amalga oshirilishi kerak"); } } class Circle extends AbstractShape { radius: number; constructor(radius: number) { super(); this.radius = radius; } area(): number { // Abstrakt metodni amalga oshirish return Math.PI * this.radius * this.radius; } } // const shape = new AbstractShape(); // Xato const circle = new Circle(5); console.log("Doira yuzasi:", circle.area());
Ushbu metodlarning turli darajadagi qat'iylik va tekshirish imkoniyatlarini tushunish muhimdir. TypeScript eng kuchli statik tekshiruvni taqdim etadi, qolganlari esa ko'proq runtime tekshirish yoki hujjatlashga qaratilgan.