Sobes.tech
Middle

Бо чӣ метавон интерфейсҳоро дар JavaScript иваз кард?

sobes.tech AI

Ҷавоб аз AI

Интерфейсҳо дар JavaScript ба таври ватанӣ дастгирӣ намешаванд, онҳоро бо роҳҳои зерин иваз кардан мумкин аст:

  • Тафтишоти навъҳо дар вақти иҷро (Runtime type checking): Истифодаи китобхонаҳо монанди Zod, Yup ё Joi барои тавсифи сохтори маълумот ва тасдиқи арзишҳои воридотӣ.

    // Мисол бо Zod
    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('Маълумоти корбар дуруст аст:', validUserData);
    } catch (error) {
      console.error('Хатои тасдиқ:', error.errors);
    }
    
  • JSDoc: Шарҳҳо бо таърифҳои навъҳо барои ҳуҷҷатгузорӣ ва пешниҳоди маълумот барои IDE ва таҳлилгарони статикӣ.

    /**
     * @typedef {Object} Product
     * @property {number} id - Идентификатори беназири маҳсулот.
     * @property {string} name - Номи маҳсулот.
     * @property {number} price - Қимати маҳсулот.
     */
    
    /**
     * Маълумоти маҳсулотро нишон медиҳад.
     * @param {Product} product - Объекти маҳсулот.
     */
    function displayProduct(product) {
      console.log(`Маҳсулот: ${product.name}, Қимат: ${product.price}`);
    }
    
    const myProduct = { id: 101, name: 'Китоб', price: 500 };
    displayProduct(myProduct);
    
  • Таҳти шартномаҳои номгузорӣ ва ҳуҷҷатгузорӣ: Шартномаҳои равшан дар бораи чӣ гуна бояд хусусиятҳо ва усулҳои объектҳо номгузорӣ шаванд, ки дар ҳуҷҷатҳои коди тасвиршуда.

  • TypeScript: Самарабахштарин усул, ки имкон медиҳад, ки интерфейсҳои пурра ва санҷиши навъҳои статикӣ дар вақти таҳия истифода шаванд.

    interface IProduct {
      id: number;
      name: string;
      price: number;
      displayInfo(): void; // Тарзи муайян кардани усул
    }
    
    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(`Маҳсулот: ${this.name}, Қимат: ${this.price}`);
      }
    }
    
    const myBook: IProduct = new Book(102, 'Роман', 700);
    myBook.displayInfo();
    
  • Классҳои абстрактӣ (ба андозаи муайян): Гарчанде JavaScript классҳои воқеии абстрактиро надорад, онҳо метавонанд бо эмуляцияи хатоҳо ҳангоми кӯшиши сохтани намунаи классҳои абстрактӣ ё даъвати усулҳои "абстрактӣ" эҷод шаванд.

    class AbstractShape {
      constructor() {
        if (new.target === AbstractShape) {
          throw new Error("Намудани намунаи классҳои AbstractShape ғайриимкон аст");
        }
      }
    
      area() {
        throw new Error("Усули area бояд дар подкласс татбиқ карда шавад");
      }
    }
    
    class Circle extends AbstractShape {
      radius: number;
    
      constructor(radius: number) {
        super();
        this.radius = radius;
      }
    
      area(): number { // Татбиқи усули абстрактӣ
        return Math.PI * this.radius * this.radius;
      }
    }
    
    // const shape = new AbstractShape(); // Хатогӣ меорад
    const circle = new Circle(5);
    console.log("Ҳаҷми давра:", circle.area());
    

Муҳим аст, ки фаҳмем, ки ин усулҳо сатҳҳои гуногуни сахтгирӣ ва назоратро таъмин мекунанд. TypeScript беҳтарин назорати статикро дар вақти компилятсия пешниҳод мекунад, дар ҳоле ки дигар усулҳо бештар ба назорати дар вақти иҷро ё ҳуҷҷатгузорӣ равона шудаанд.