åtkomstmodifierare - Tilldelning av Typescript-konstruktörsparametrar
Jag har ett gränssnitt:
export interface IFieldValue {
name: string;
value: string;
}
Och jag har en klass som implementerar den:
class Person implements IFieldValue{
name: string;
value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
efter att ha läst detta inlägg har jag funderat på att omstrukturera:
class Person implements IFieldValue{
constructor(public name: string, public value: string) {
}
}
Fråga: I första klassen har jag fält som som standard borde vara private. I det andra exemplet kan jag bara sätta dem som public. Är allt korrekt i min förståelse av standardåtkomstmodifierare i TypeScript?
Svar #1
Offentlig som standard. TypeScript-dokumentation
I följande definition
class Person implements IFieldValue{
name: string;
value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
Attributen <Person>.name och <Person>.value är offentliga som standard.
som de är här
class Person implements IFieldValue{
constructor(public name: string, public value: string) {
this.name = name;
this.value = value;
}
}
Varning: Här är ett felaktigt sätt att göra det på, eftersom this.name och this.value kommer att betraktas som odefinierade i konstruktorn.
class Person implements IFieldValue{
constructor(name: string, value: string) {
this.name = name;
this.value = value;
}
}
För att göra dessa attribut privata behöver du skriva om det som
class Person implements IFieldValue{
private name: string;
private value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
eller ekvivalent
class Person implements IFieldValue{
constructor (private name: string, private value: string) {}
}
För TypeScript 2.X eftersom gränssnittet har egenskaperna som offentliga, behöver du ändra private till public och även export klasserna
export class Person implements IFieldValue{
constructor (public name: string, public value: string) {}
}
vilket enligt min åsikt är det mest föredragna sättet som undviker överflöd.
