TypeScript voor beginners, deel 4 klassen

We hebben een lange weg afgelegd om TypeScript te leren sinds we deze serie begonnen. De eerste tutorial gaf je een korte introductie van TypeScript en stelde enkele IDE's voor die je kunt gebruiken om TypeScript te schrijven. De tweede zelfstudie was gericht op gegevenstypen en de derde zelfstudie besprak de basisbeginselen van interfaces in TypeScript.

Zoals u wellicht al weet, heeft JavaScript pas native ondersteuning voor klassen en objectgeoriënteerd programmeren toegevoegd. TypeScript heeft ontwikkelaars echter toegestaan ​​om klassen lange tijd in hun code te gebruiken. Deze code wordt vervolgens gecompileerd naar JavaScript dat werkt in alle belangrijke browsers. In deze zelfstudie leer je over klassen in TypeScript. Ze lijken op hun ES6-tegenhangers, maar zijn strenger.

Uw eerste klas creëren

Laten we beginnen met de basis. Klassen zijn een fundamenteel onderdeel van objectgeoriënteerd programmeren. U gebruikt klassen om een ​​entiteit weer te geven die enkele eigenschappen en functies heeft die op bepaalde eigenschappen kunnen werken. TypeScript geeft u volledige controle over de eigenschappen en functies die toegankelijk zijn binnen en buiten de eigen klasse. Hier is een heel eenvoudig voorbeeld van het maken van een Persoon klasse.

klasse Persoon naam: string; constructor (theName: string) this.name = theName;  introductionSelf () console.log ("Hallo, ik ben" + this.name + "!");  let personA = new Person ("Sally"); personA.introduceSelf ();

De bovenstaande code maakt een heel eenvoudige klasse genaamd Persoon. Deze klasse heeft een eigenschap genaamd naam en een functie genaamd introduceSelf. De klasse heeft ook een constructor, die in feite ook een functie is. Constructors zijn echter speciaal omdat ze worden opgeroepen telkens wanneer we een nieuw exemplaar van onze klasse maken. 

U kunt parameters ook aan constructeurs doorgeven om verschillende eigenschappen te initialiseren. In ons geval gebruiken we de constructor om de naam te initialiseren van de persoon die we maken met behulp van de Persoon klasse. De introduceSelf functie is een methode van de Persoon klasse, en we gebruiken het hier om de naam van de persoon naar de console af te drukken. Al deze eigenschappen, methoden en de constructor van een klasse worden gezamenlijk klassenleden genoemd.

Houd er rekening mee dat het Persoon klasse maakt niet automatisch een persoon alleen. Het werkt meer als een blauwdruk met alle informatie over de kenmerken die een persoon ooit had moeten hebben. Met dat in gedachten hebben we een nieuwe persoon gecreëerd en haar Sally genoemd. De methode aanroepen introduceSelf op deze persoon zal de regel "Hallo, ik ben Sally!" naar de console.

Particuliere en openbare modifiers

In het vorige gedeelte hebben we een persoon met de naam Sally gemaakt. Op dit moment is het mogelijk om de naam van de persoon van Sally naar Mindy overal in onze code te wijzigen, zoals in het volgende voorbeeld wordt getoond.

klasse Persoon naam: string; constructor (theName: string) this.name = theName;  introductionSelf () console.log ("Hallo, ik ben" + this.name + "!");  let personA = new Person ("Sally"); // Prints "Hallo, ik ben Sally!" personA.introduceSelf (); personA.name = "Mindy"; // Prints "Hallo, ik ben Mindy!" personA.introduceSelf (); 

Je hebt misschien gemerkt dat we beide konden gebruiken naam eigendom en de introduceSelf methode buiten de bevattende klasse. Dit komt omdat alle leden van een klasse in TypeScript zijn openbaar standaard. U kunt ook expliciet aangeven dat een eigenschap of methode openbaar is door het trefwoord toe te voegen openbaar voor het.

Soms wilt u niet dat een eigenschap of methode toegankelijk is buiten de bestaande klasse. Dit kan worden bereikt door die leden privé te maken met behulp van de privaat trefwoord. In de bovenstaande code kunnen we de eigenschap name maken privaat en voorkomen dat het buiten de bevattende klasse wordt gewijzigd. Na deze wijziging toont TypeScript u een foutmelding dat het naam eigendom is privaat en je hebt er alleen toegang toe binnen de Persoon klasse. De onderstaande schermafbeelding toont de fout in Visual Studio-code.

Overerving in TypeScript

Met overerving kunt u meer complexe klassen maken die beginnen bij een basisklasse. We kunnen bijvoorbeeld de Persoon klasse uit de vorige sectie als basis om een ​​te maken vriend klas die alle leden van de. zal hebben Persoon en voeg een aantal eigen leden toe. U kunt ook een toevoegen Familie of Leraar klasse. 

Ze zullen allemaal de methoden en eigenschappen van de Persoon terwijl je enkele eigen methoden en eigenschappen toevoegt om ze van elkaar te onderscheiden. Het volgende voorbeeld zou het duidelijker moeten maken. Ik heb ook de code voor de Persoon class hier, zodat u eenvoudig de code van zowel de basisklasse als de afgeleide klasse kunt vergelijken.

class Person private name: string; constructor (theName: string) this.name = theName;  introductionSelf () console.log ("Hallo, ik ben" + this.name + "!");  klas Vriend verlengt Persoon yearsKnown: number; constructor (naam: string, yearsKnown: number) super (name); this.yearsKnown = yearsKnown;  timeKnown () console.log ("We zijn vrienden geweest voor" + this.yearsKnown + "years.") let friendA = new Friend ("Jacob", 6); // Prints: Hallo, ik ben Jacob! friendA.introduceSelf (); // Prints: we zijn al 6 jaar vrienden. friendA.timeKnown (); 

Zoals je kunt zien, moet je de gebruiken uitbreiden sleutelwoord voor de vriend klasse om alle leden van de. te erven Persoon klasse. Het is belangrijk om te onthouden dat de constructor van een afgeleide klasse altijd de constructor van de basisklasse moet aanroepen met een aanroep naar super().

Je hebt misschien gemerkt dat de constructor van vriend hoefde niet hetzelfde aantal parameters te hebben als de basisklasse. De parameter first name is echter doorgegeven aan super() om de constructor van de ouder aan te roepen, die ook een parameter accepteerde. We hoefden het niet opnieuw te definiëren introduceSelf functie binnen de vriend klasse omdat het is overgenomen van de Persoon klasse.

De beschermde modifier gebruiken

Tot nu toe hebben we alleen de leden van een klas gemaakt privaat of openbaar. Door ze openbaar te maken, kunnen we ze overal openen, waardoor de leden privé beperken tot hun eigen klasse. Soms wilt u misschien dat de leden van een basisklasse toegankelijk zijn in alle afgeleide klassen. 

U kunt de beschermde modifier in dergelijke gevallen om de toegang van een lid tot afgeleide klassen te beperken. U kunt ook de beschermde sleutelwoord met de constructor van een basisklasse. Hiermee wordt voorkomen dat iemand een exemplaar van die klasse maakt. U kunt echter nog steeds klassen uitbreiden op basis van deze basisklasse.

class Person private name: string; beschermde leeftijd: aantal; protected constructor (theName: string, theAge: number) this.name = theName; this.age = theAge;  introductionSelf () console.log ("Hallo, ik ben" + this.name + "!");  klas Vriend verlengt Persoon yearsKnown: number; constructor (naam: string, leeftijd: aantal, jaarBekend: aantal) super (naam, leeftijd); this.yearsKnown = yearsKnown;  timeKnown () console.log ("We zijn vrienden geweest voor" + this.yearsKnown + "years.") friendSince () let firstAge = this.age - this.yearsKnown; console.log ('We zijn vrienden sinds ik $ firstAge jaar oud was.') vriend A = nieuwe vriend ("William", 19, 8); // Prints: We zijn vrienden sinds ik 11 jaar oud was. friendA.friendSince ();

In de bovenstaande code kun je zien dat we de leeftijd eigendom beschermde. Dit voorkomt het gebruik van leeftijd buiten klassen afgeleid van Persoon. We hebben ook het beschermde sleutelwoord voor de constructor van de Persoon klasse. De constructor wordt aangegeven als beschermde betekent dat we niet langer direct kunnen beginnen met het maken van de Persoon klasse. De volgende schermafbeelding toont een fout die opduikt tijdens het proberen om een ​​klas te instantiëren met de beschermde bouwer.

Laatste gedachten

In deze zelfstudie heb ik geprobeerd de basisbeginselen van klassen in TypeScript te behandelen. We zijn begonnen met de zelfstudie door een erg eenvoudige basis te maken Persoon klas die de naam van de persoon op de console heeft afgedrukt. Daarna leerde je over de privaat sleutelwoord, dat kan worden gebruikt om te voorkomen dat leden van een klasse op een willekeurig punt in het programma worden benaderd. 

Ten slotte hebt u geleerd hoe u verschillende klassen in uw code kunt uitbreiden met een basisklasse met overerving. Er is veel meer dat u kunt leren over klassen in de officiële documentatie.

Als je nog vragen hebt over deze tutorial, laat het me dan weten in de comments.