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.
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.
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.
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.
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.
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.
De constructor declareert twee fields in zijn parameterlijst. De cache is een #-field, dus niets buiten de class kan hem lezen of legen.
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.
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
Kies een modifier
Toegang tot een {v}-member
Gebruikt vanuit
Code
tsc-resultaat
Compileert
Gratis beginnen · Geen creditcard nodig