Ich verwende TypeScript, um einige Klassen mit KnockoutJS zu erstellen, wobei die Daten von JSON geladen werden, die von WebAPI zurückgegeben werden.Typoskript-Klassenwerte aus Konstruktor
Das Problem ist, ich wollte die JSON-Werte in meine TypeScript-Klasse aus dem Konstruktor kopieren: aber wenn ich dies nur an der Basisklasse tun, wurden die geerbten Eigenschaften nicht definiert und daher nicht initialisiert.
Beispiel
Wir wollen eine Bestandsaufnahme Element aus einer JSON-Antwort erstellen:
{ Name: "Test", Quantity:1, Price: 100 }
Ich habe eine Basisklasse Produkt und eine vererbte Klasse Inventory:
export class Product {
Name = ko.observable("");
constructor(source) {
// a utility that copies properties into this instance
utils.CopyProperties(source,this);
}
export class Inventory extends Product {
Quantity = ko.observable(0);
Price = ko.observable(0);
constructor(source) {
super(source); // call base c'tor
// the quantity and price properties are only now defined
}
}
Die Eigenschaften für Inventar wird nur in dem JS-Ausgabecode nach dem Super Konstruktoraufruf erstellt, also nicht vorhanden, wenn das Produktkonstrukt oder wird ausgeführt.
Die einzige Lösung, die ich sehen kann, ist, den Initialisierungswert aus dem Konstruktor herauszunehmen, aber ich mag diesen Ansatz nicht wirklich, obwohl ich vermute, dass es die einzige Option ist.
var inventoryItem = new Inventory();
inventoryItem.LoadFrom(source);
Welchen Zweck hat das Kopieren von Eigenschaften in die Basisinstanz? Ist es schlecht, wenn Menge und Preis nach der Kopie definiert sind? – BSick7
Ich bin mir nicht sicher, ob ich verstehe, was das Problem ist. Der Konstruktor von 'Product' sollte' Name' aus 'source' setzen und der Konstruktor von' Inventory' sollte 'Menge' und' Preis' aus 'source' setzen. – MiMo
Das Problem ist, dass Sie die Kopiereigenschaften zweimal aufrufen müssen: was macht keinen Sinn. Wenn Sie es gerade in der Produktklasse getan haben, wurde nur Name festgelegt. Wenn Sie dies nur in Inventory getan haben, rufen Sie es nicht in Product auf, so dass alles, was ein Produkt erstellt, nicht initialisiert wird. – Quango