TypeScript-classes: wie bij welk member kan

TypeScript-classes

TypeScript-classes: modifiers, readonly, abstract, implements | We.Inc

Fields, constructors, parameter properties, public, protected, private en #private, readonly, abstract en implements. Test in een live matrix wie welk member bereikt.

Een TypeScript-class is een JavaScript-class met getypeerde fields en toegangsregels. public members zijn overal bereikbaar, protected members binnen de class en haar subclasses, private members alleen binnen de class zelf. Die drie controles bestaan alleen tijdens het compileren. Een #name-field is ook in het draaiende JavaScript privé, en readonly blokkeert schrijven na de constructor.

Class-keywords en wat ze doen

Kies een modifier en de matrix toont vijf manieren waarop code dat member kan bereiken, met voor elk het resultaat van tsc. De rij met blokhaken verrast de meeste mensen: de modifiers voor compileertijd zijn te omzeilen met een string-key, een #-field niet.

Veelgestelde vragen

Wat is het verschil tussen private en #private?

private is een controle van TypeScript. Het verdwijnt uit de output, en obj["secret"] compileert nog steeds en leest de waarde. Een #secret-field is een private field van JavaScript: geen enkele string-key bereikt het, en code buiten de class kan het tijdens runtime niet lezen.

Wat zijn parameter properties?

Een snelkoppeling die een field declareert en toewijst vanuit een constructorparameter. Met constructor(private readonly id: string) {} maakt u een private readonly id-field, zonder dat er een body nodig is. Het voorvoegsel kan public, protected, private of readonly zijn.

Verandert implements de types binnen mijn class?

Nee. implements controleert alleen of de afgewerkte class bij de interface past. Methodeparameters hebben nog steeds hun eigen annotaties nodig; laat u er een weg in strict mode, dan krijgt u een implicit any-fout, ook al noemt de interface het type al.

Waarom zegt TypeScript dat een property geen initializer heeft?

strictPropertyInitialization, dat door strict wordt aangezet, wil dat elk gedeclareerd field een waarde krijgt in de declaratie of de constructor. Geef het een waarde, maak het optioneel, of zet ! achter de naam als iets anders het vóór gebruik instelt.

Wanneer gebruik ik een abstract class in plaats van een interface?

Gebruik een abstract class als subclasses echte code moeten delen, zoals een methode die een abstracte hook aanroept. Een interface bevat geen code en een class kan er meerdere implementeren, dus die past bij het beschrijven van vormen.

Fields, constructors en parameter properties

Privacy tijdens compileren versus privacy tijdens runtime

Classes en interfaces werken samen

Class-patronen in de praktijk

Parameter properties en een #-field

De constructor declareert twee fields in zijn parameterlijst. De cache is een #-field, dus niets buiten de class kan hem lezen of legen.

Een abstracte basis met een override

describe is gedeelde code; area is de hook die elke vorm moet leveren. Met noImplicitOverride aan is het override-keyword verplicht op area in Circle.

implements controleert, het leidt niets af

De interface zorgt dat de class send met de juiste vorm heeft, maar de parameter heeft nog steeds een eigen typeannotatie nodig.

Geen beperkingen. De modifier weglaten betekent hetzelfde.

Binnen de eigen methoden van Account

Binnen een methode van Savings

Buiten, met een punt

Buiten, met een string-key

Buiten, met een nieuwe waarde toewijzen

Open voor de class en haar subclasses. Een string-key komt nog steeds langs de controle, omdat het alleen een typeregel is.

Binnen de eigen methoden van Account

Binnen een methode van Savings

Buiten, met een punt

Buiten, met een string-key

Buiten, met een nieuwe waarde toewijzen

Zelfs dicht voor subclasses, maar alleen tijdens typecontrole. De vorm met blokhaken compileert en de waarde is leesbaar tijdens runtime.

Binnen de eigen methoden van Account

Binnen een methode van Savings

Buiten, met een punt

Buiten, met een string-key

Buiten, met een nieuwe waarde toewijzen

Een private field van JavaScript. Geen string-key noemt het, dus elke route van buiten faalt, en de engine dwingt dezelfde regel af tijdens runtime.

Binnen de eigen methoden van Account

Binnen een methode van Savings

Buiten, met een punt

Buiten, met een string-key

Buiten, met een nieuwe waarde toewijzen

Iedereen mag het lezen; niemand mag het na de constructie toewijzen, zelfs de eigen methoden van de class niet.

Binnen de eigen methoden van Account

Binnen een methode van Savings

Buiten, met een punt

Buiten, met een string-key

Buiten, met een nieuwe waarde toewijzen

Matrix voor toegang tot members

Kies een modifier

Toegang tot een {v}-member

Gebruikt vanuit

Code

tsc-resultaat

Compileert

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap