Ty­pe­Script-klasser giver en klar og struk­tu­re­ret måde at or­ga­ni­se­re data og adfærd i et objekt på. Dette gør det lettere for dig at modellere enheder og koncepter i din kode.

Hvad er Ty­pe­Script-klasser?

Klaser er et centralt begreb i Ty­pe­Script, som er et pro­gram­me­rings­sprog baseret på Ja­va­Script. Klasser re­præ­sen­te­rer en struk­tu­re­ret metode til at definere objekter og anvende ob­jekt­o­ri­en­te­ret pro­gram­me­ring (OOP). Ty­pe­Script-klasser er som blu­e­prints til at oprette objekter, der samler logisk re­la­te­re­de data og metoder.

Ty­pe­Script in­de­hol­der alle Ja­va­Script-funk­tio­ner­ne og omfatter også statisk typning. Dette giver dig mulighed for at angive datatyper for Ty­pe­Script-funk­tio­ner, variabler og klasser, så du kan opdage kom­pi­le­rings­fejl. Ud over ty­pe­sik­ker­hed un­der­støt­ter Ty­pe­Script-klasser også begreber som arv og ab­strak­tion, hvilket letter ud­vik­lin­gen af komplekse ap­pli­ka­tio­ner.

Med Ty­pe­Script-klasser kan du oprette en klar hierarki af klasser, der arver egen­ska­ber og metoder. Dette fremmer genbrug og struk­tu­re­ring af kode. Klas­se­kon­struk­to­rer gør det muligt at ini­ti­a­li­se­re instanser og sikrer kon­si­stent ob­jektop­ret­tel­se.

Hvad er syntaksen for Ty­pe­Script-klasser?

No­ta­tio­nen for Ty­pe­Script-klasser ligner den i EC­MA­Script 6 (ES6) og er en udvidet version af Ja­va­Script-klas­se­syn­tak­sen. En Ty­pe­Script-klasse kan indeholde for­skel­li­ge elementer til at definere objekters struktur og adfærd. De vigtigste kom­po­nen­ter er:

  • Egen­ska­ber
  • Kon­struk­tø­rer
  • Metoder

Egen­ska­ber

Egen­ska­ber bestemmer et objekts tilstand. De gemmer da­ta­vær­di­er og kan forsynes med datatyper, så de kun har gyldige værdier.

class ClassName {
    propertyName: propertyType;
}
ty­pe­script
  • ClassName: navnet på klassen
  • pro­per­ty­Na­me: navnet på den egenskab, du vil definere
  • pro­per­ty­Ty­pe: datatypen for egen­ska­ben

Her er et konkret eksempel:

class Person {
    name: string;
}
ty­pe­script

Først defineres en klasse Person med en egenskab name af typen string. Det betyder, at instanser af klassen Person har en egenskab name, der gemmer strenge.

Kon­struk­tør

Kon­struk­to­ren i Ty­pe­Script er en speciel metode, der kaldes, når en klas­se­in­stans (objekt) oprettes. Du har brug for den til at ini­ti­a­li­se­re et objekts egen­ska­ber. Kon­struk­to­ren definerer i det væ­sent­li­ge en instans’ ind­le­den­de tilstand. Du kan angive parametre i kon­struk­to­ren for at overføre værdier, når du in­stan­si­e­rer Ty­pe­Script-klasser.

Den grund­læg­gen­de syntaks for en kon­struk­tør i Ty­pe­Script er:

class ClassName {
    constructor(parameter1: Type1, parameter2: Type2, ...) {
    }
}
ty­pe­script
  • kon­struk­tør: hver klasse kan have en enkelt kon­struk­tør. Hvis der ikke er defineret nogen kon­struk­tør, oprettes der som standard en tom kon­struk­tør.
  • parameter: Type: parametre er valgfri, afhængigt af klassen og dens krav. Parametre skal mærkes med deres datatyper.

Et eksempel på en kon­struk­tør:

class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
ty­pe­script

I eksemplet ovenfor har klassen Person en kon­struk­tør, der ac­cep­te­rer to parametre firstName og lastName. Når der oprettes en instans af denne klasse, overføres disse parametre, og kon­struk­tø­ren ini­ti­a­li­se­rer in­stan­sens egen­ska­ber firstName og lastName med de til­sva­ren­de værdier. this henviser til den aktuelle instans af klassen, som koden udføres på.

Metoder

I Ty­pe­Script er metoder funk­tio­ner, der kan defineres i klasser og anvendes på deres instanser. Metoder giver dig mulighed for at udføre bestemte hand­lin­ger eller ope­ra­tio­ner i for­bin­del­se med en klasse.

class ClassName {
    // ...
    methodName(parameter1: Type1, parameter2: Type2, ...): ReturnType {
    }
    // ...
}
ty­pe­script
  • met­hod­Na­me: navnet på metoden
  • parameter: Type: valgfri parametre, som metoden ac­cep­te­rer
  • Re­tur­n­Ty­pe: dette er den datatype, der bestemmer den værdi, som metoden re­tur­ne­rer. Hvis metoden ikke re­tur­ne­rer noget, kan du angive void.

For at få adgang til en egenskab eller kalde en metode på en klas­se­in­stans skal du bruge pri­ko­pe­ra­to­ren . ef­ter­fulgt af metodens navn og de nød­ven­di­ge ar­gu­men­ter, hvis metoden forventer parametre.

class Person {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    getFullName(): string {
        return this.firstName + " " + this.lastName;
    }
}
const person = new Person("John", "Doe");
const fullName = person.getFullName();
ty­pe­script

Metoden getFullName bruges til at oprette og returnere personens fulde navn. Den får adgang til værdierne for egen­ska­ber­ne firstName og lastName, der er defineret i klassen og ini­ti­a­li­se­ret i kon­struk­tø­ren. Objektet person oprettes ved hjælp af nøg­le­or­det new ef­ter­fulgt af klassens navn og de respek­ti­ve parametre. Metoden sam­men­kæ­der de to strenge, når den kaldes, og re­tur­ne­rer det fulde navn som en streng. Outputtet for objektet person er derfor “John Doe”.

Ty­pe­Script-klas­se­ek­semp­ler

Ty­pe­Script-klasser har for­skel­li­ge me­ka­nis­mer til at or­ga­ni­se­re og kon­trol­le­re objekters struktur og adfærd. Nedenfor præ­sen­te­rer vi nogle koncepter til brug af Ty­pe­Script-klasser.

Adgang

Ty­pe­Script tilbyder tre ad­gangs­mo­di­fi­ka­to­rer: public, private og protected til at kon­trol­le­re adgangen til egen­ska­ber og metoder inden for og uden for klassen.

  • offentlig (standard): egen­ska­ber og metoder markeret med public kan kaldes fra hvor som helst, både inden for og uden for klassen.
  • privat: private henviser til egen­ska­ber og metoder, der kun kan kaldes inden for selve klassen. De er util­gæn­ge­li­ge for eksterne ko­destyk­ker.
  • beskyttet: egen­ska­ber og metoder markeret med protected kan kaldes af selve klassen og af afledte klasser (i arv), men ikke af ekstern kode.
class Person {
    private socialSecurityNumber: string;
    constructor(ssn: string) {
        this.socialSecurityNumber = ssn;
    }
    greet() {
        console.log("Hello, I am a person with SSN: " + this.socialSecurityNumber);
    }
}
const person = new Person("123-45-6789");
person.greet();
ty­pe­script

I dette eksempel er socialSecurityNumber en privat egenskab, som kun kan tilgås inden for klassen Person. Du kan dog kalde metoden greet uden for klassen.

Arv

Arv er et grund­læg­gen­de begreb i ob­jekt­o­ri­en­te­ret pro­gram­me­ring (OOP), der bruges i Ty­pe­Script og mange andre in­ter­net­pro­gram­me­rings­sprog. Det gør det muligt at oprette en ny klasse på basis af en ek­si­ste­ren­de ba­sis­klas­se eller su­per­klas­se. Den afledte klasse (un­der­klas­se) arver ba­sis­klas­sens egen­ska­ber og metoder og kan udvide eller tilpasse dem.

class Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    makeSound() {
        console.log("Some generic sound");
    }
}
class Dog extends Animal {
    makeSound() {
        console.log(this.name + " barks");
    }
}
const myDog = new Dog("Buddy");
myDog.makeSound();
ty­pe­script

Ved hjælp af nøg­le­or­det extends arver un­der­klas­sen Dog egen­ska­ber­ne og metoderne fra over­klas­sen Animal. Klassen Dog til­si­de­sæt­ter metoden makeSound for at tilføje en specifik adfærd, samtidig med at den arver egen­ska­ben name fra Animal.

Skri­ve­be­skyt­tet

Du kan bruge readonly til at erklære egen­ska­ber for Ty­pe­Script-klasser eller -objekter som skri­ve­be­skyt­te­de. Det betyder, at når en skri­ve­be­skyt­tet egenskab er blevet ini­ti­a­li­se­ret, kan dens værdi ikke længere ændres.

class Circle {
    readonly pi: number = 3.14159;
    radius: number;
    constructor(radius: number) {
        this.radius = radius;
    }
    getArea() {
        return this.pi    *this.radius*    this.radius;
    }
}
const myCircle = new Circle(5);
console.log(myCircle.getArea()); // Output: ≈ 78,54
ty­pe­script

I vores eksempel er egen­ska­ben pi skri­ve­be­skyt­tet og ini­ti­a­li­se­res i kon­struk­tø­ren. Efter ini­ti­a­li­se­rin­gen kan pi ikke længere ændres. Hvis du forsøger at ændre værdien af pi efter ini­ti­a­li­se­rin­gen, genererer Ty­pe­Script en kom­pi­le­rings­fejl.

Gå til ho­ved­me­nu­en