Sobes.tech
Middle

Millega saab JavaScriptis asendada liideseid?

sobes.tech AI

Vastus AI-lt

JavaScript nav iebūvētu interfeisu, tos var aizstāt ar:

  • Tipu pārbaude izpildes laikā (Runtime type checking): izmantojot bibliotēkas kā Zod, Yup vai Joi, lai aprakstītu datu struktūru un veiktu ievades vērtību validāciju.

    // Ar Zod piemēru
    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('Lietotāja dati ir derīgi:', validUserData);
    } catch (error) {
      console.error('Validācijas kļūda:', error.errors);
    }
    
  • JSDoc: komentāri ar tipu anotācijām dokumentācijai un IDE un statiskajiem analizatoriem.

    /**
     * @typedef {Object} Product
     * @property {number} id - Produkta unikālais identifikators.
     * @property {string} name - Produkta nosaukums.
     * @property {number} price - Produkta cena.
     */
    
    /**
     * Attēlo produkta informāciju.
     * @param {Product} product - Produkta objekts.
     */
    function displayProduct(product) {
      console.log(`Produkts: ${product.name}, Cena: ${product.price}`);
    }
    
    const myProduct = { id: 101, name: 'Grāmata', price: 500 };
    displayProduct(myProduct);
    
  • Vārdu vienošanās un dokumentācija: skaidras vienošanās par to, kā jābūt nosauktiem objekta īpašības un metodes, kas aprakstītas dokumentācijā.

  • TypeScript: visefektīvākais veids, kas ļauj izmantot pilnas interfeisa un statisko tipu pārbaudi izstrādes laikā.

    interface IProduct {
      id: number;
      name: string;
      price: number;
      displayInfo(): void; // Metodes definīcija
    }
    
    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(`Produkts: ${this.name}, Cena: ${this.price}`);
      }
    }
    
    const myBook: IProduct = new Book(102, 'Roman', 700);
    myBook.displayInfo();
    
  • Abstraktās klases (dažos gadījumos): Lai gan JavaScript nav patiesu abstraktu klasu, tās var imitēt, radot kļūdas, mēģinot izveidot abstraktās klases eksemplāru vai izsaucot "abstraktās" metodes.

    class AbstractShape {
      constructor() {
        if (new.target === AbstractShape) {
          throw new Error("Nevar izveidot abstraktās klases AbstractShape eksemplāru");
        }
      }
    
      area() {
        throw new Error("Metode area jārealizē apakšklasē");
      }
    }
    
    class Circle extends AbstractShape {
      radius: number;
    
      constructor(radius: number) {
        super();
        this.radius = radius;
      }
    
      area(): number { // abstraktās metodes realizācija
        return Math.PI * this.radius * this.radius;
      }
    }
    
    // const shape = new AbstractShape(); // radīs kļūdu
    const circle = new Circle(5);
    console.log("Riņķa laukums:", circle.area());
    

Svarīgi saprast, ka šie metodi nodrošina dažādu stingrības un pārbaudes līmeņu. TypeScript nodrošina visstiprāko statisko pārbaudi kompilācijas laikā, kamēr pārējās metodes vairāk ir orientētas uz izpildes laika pārbaudi vai dokumentāciju.