Kuo galima pakeisti sąsajas JavaScript?
sobes.tech AI
Atsakymas iš AI
JavaScript'e nėra natūraliai numatytų sąsajų, jas galima pakeisti:
-
Tipų patikrinimas vykdymo metu (Runtime type checking): naudojant bibliotekas kaip Zod, Yup ar Joi, aprašyti duomenų struktūrą ir patikrinti įeinančias reikšmes.
// Pavyzdys su 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('Vartotojo duomenys yra galiojantys:', validUserData); } catch (error) { console.error('Validacijos klaida:', error.errors); } -
JSDoc: komentarai su tipų anotacijomis dokumentacijai ir IDE bei statiniams analizatoriams.
/** * @typedef {Object} Product * @property {number} id - Unikalus produkto identifikatorius. * @property {string} name - Produkto pavadinimas. * @property {number} price - Produkto kaina. */ /** * Parodo produkto informaciją. * @param {Product} product - Produkto objektas. */ function displayProduct(product) { console.log(`Produktas: ${product.name}, Kaina: ${product.price}`); } const myProduct = { id: 101, name: 'Knyga', price: 500 }; displayProduct(myProduct); -
Vardų susitarimai ir dokumentacija: aiškūs susitarimai, kaip turi būti pavadinti objektų savybės ir metodai, aprašyti dokumentacijoje.
-
TypeScript: efektyviausias metodas, leidžiantis naudoti pilnus sąsajas ir statinį tipavimą kūrimo metu.
interface IProduct { id: number; name: string; price: number; displayInfo(): void; // metodo apibrėžimas } 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(`Produktas: ${this.name}, Kaina: ${this.price}`); } } const myBook: IProduct = new Book(102, 'Romanas', 700); myBook.displayInfo(); -
Abstrakčios klasės (kai kuriais atvejais): nors JavaScript neturi tikrų abstrakčių klasių, jas galima imituoti sukeliant klaidas bandant sukurti abstrakčios klasės egzempliorių arba iškviesti "abstrakčius" metodus.
class AbstractShape { constructor() { if (new.target === AbstractShape) { throw new Error("Negalima sukurti abstrakčios klasės AbstractShape egzemplioriaus"); } } area() { throw new Error("Metodas area turi būti įgyvendintas pogrupyje"); } } class Circle extends AbstractShape { radius: number; constructor(radius: number) { super(); this.radius = radius; } area(): number { // abstraktaus metodo įgyvendinimas return Math.PI * this.radius * this.radius; } } // const shape = new AbstractShape(); // sukels klaidą const circle = new Circle(5); console.log("Apskritimo plotas:", circle.area());
Svarbu suprasti, kad šie metodai užtikrina skirtingus griežtumo ir patikros lygius. TypeScript siūlo stipriausią statinę patikrą kompiliacijos metu, o kiti metodai labiau orientuoti į vykdymo metu patikrinimą arba dokumentaciją.