Auch wenn TypeScript die Initialisierung der Eigenschaft analysiert, wenn Sie diesen Fall immer selbst behandeln möchten, können Sie dies in dieser Einstellung in ts.config.json
auf false
setzen.
{
"compilerOptions": {
"strict": true,
"strictPropertyInitialization": false
}
}
Strenge Eigenschaftsinitialisierung - strictPropertyInitialization
Wenn auf true gesetzt, wird TypeScript einen Fehler melden, wenn eine Klasseneigenschaft deklariert wurde, aber nicht im Konstruktor gesetzt wurde.
In diesem Fall sollten Sie auch andere Fälle in Betracht ziehen, die Sie in den unten stehenden Links sehen.
class UserAccount {
name: string;
accountType = "user";
email: string;//Die Eigenschaft 'email' hat keinen Initialisierer und wird nicht im Konstruktor definitiv zugewiesen.
address: string | undefined;
constructor(name: string) {
this.name = name;
// Beachten Sie, dass this.email nicht gesetzt ist
}
}
this.name
wird explizit gesetzt.
this.accountType
wird standardmäßig gesetzt.
this.email
ist nicht gesetzt und ruft einen Fehler auf.
this.address
wird als potenziell undefined deklariert, was bedeutet, dass es nicht gesetzt werden muss.
Der Compiler gibt keinen Fehler aus, wenn wir strictPropertyInitialization
auf false
setzen.
private _name : string;
public get name() : string {
return this._name;
}
public set name(v : string) {
this._name = v;
}
https://www.typescriptlang.org/docs/handbook/2/classes.html#--strictpropertyinitialization https://www.typescriptlang.org/tsconfig#strictPropertyInitialization
15 Stimmen
Der Unterstrich und PascalCase sind im Konflikt mit den TypeScript-Codierungsrichtlinien: github.com/Microsoft/TypeScript/wiki/Coding-guidelines
4 Stimmen
Hallo @NielsSteenbeek - wenn Sie den TypeScript-Richtlinien für Mitwirkende folgen, würden Sie mit Properties und Backing-Feldern mit einem Namenskonflikt enden. Was ist der vorgeschlagene Ansatz?
1 Stimmen
Vielleicht:
typescript privater name: string; getName() { get: {return this.name;} set: {this.name = ???;} }
12 Stimmen
Es ist gut, dass diese Typescript-Codierungsrichtlinien ziemlich unattraktiv sind. Ich würde sie nur unter Zwang verwenden (z. B. wenn ich dafür bezahlt werde).
40 Stimmen
@NielsSteenbeek: Hast du dieses Dokument gelesen? "Dies ist KEINE verbindliche Richtlinie für die TypeScript-Community"