Basierend auf dem von Ihnen gezeigten Beispiel möchten Sie ein Datenobjekt übergeben und eine Eigenschaft dieses Objekts mit get()
abrufen. Dafür müssen Sie einen generischen Typ verwenden, da das Datenobjekt generisch ist und jedes Objekt sein kann.
export class Attributes {
constructor(private data: T) {}
get = (key: K): T[K] => {
return this.data[key];
};
set = (update: T): void => {
// Das ist wie der Spread-Operator. Es nimmt das this.data-Objekt und überschreibt es mit dem update-Objekt
// In der tsconfig.json Ändern Sie das Ziel auf Es6, um Object.assign() verwenden zu können
Object.assign(this.data, update);
};
getAll(): T {
return this.data;
}
}
< T > bezieht sich auf den generischen Typ. Lassen Sie uns eine Instanz initialisieren
const myAttributes=new Attributes({name:"etwas",age:32})
myAttributes.get("name")="etwas"
Beachten Sie diese Syntax
Um dies verwenden zu können, sollten wir uns zweier Dinge bewusst sein:
1- In typescript können Zeichenketten ein Typ sein.
2- Alle Objekteigenschaften in JavaScript sind im Wesentlichen Zeichenketten.
Wenn wir get() verwenden, ist der Typ des Arguments, das es empfängt, eine Eigenschaft des Objekts, das dem Konstruktor übergeben wurde, und da Objekteigenschaften Zeichenketten sind und Zeichenketten in typescript als Typ erlaubt sind, könnten wir verwenden
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"