Nehmen wir an, ich habe eine Basisklasse mit einer Eigenschaft dataItems, die ein Array von DataItem ist:
%Vor%Dann habe ich mehrere Klassen, die BaseClass erweitern, und ihre Eigenschaft dataItems ist ein Array einer Klasse, die DataItems erweitert:
%Vor%Nun möchte ich eine Methode in BaseClass hinzufügen, die dataItems erstellt und sie zu Array hinzufügt. Wäre es möglich, all dies in BaseClass zu tun? Ich muss eine Instanz von BetterDataItems oder BestDataItems erstellen, abhängig von der verwendeten Klasse.
Im Moment habe ich einfach hinzugefügt:
%Vor%-Eigenschaft für BaseClass und in jeder Klasse, die BaseClass I erweitert, überschreibt diese Variable mit dem richtigen Datenelementtyp:
in BetterClass:
%Vor%in BestClass:
%Vor%Und dann, in BaseClass mache ich das:
%Vor% Das funktioniert gut, aber meine Frage ist - wäre es möglich, dataItemType
-Eigenschaft zu vermeiden? Kann ich einen Typ von dataItems
-Array finden und dann eine neue Instanz erstellen?
Danke!
TypeScript 1.6-Code:
%Vor%kompiliert zu:
%Vor% Und Sie können sehen, dass Typinformationen für dataItems
-Eigenschaft in BaseClass
verloren gehen. So funktioniert der TypeScript-Compiler. Die Laufzeitprüfung wird nicht unterstützt . Also antworte auf deine Frage nein.
Ihre Problemumgehung mit dataItemType: typeof BetterDataItem = BetterDataItem;
funktioniert, weil Sie den TypeScript-Compiler zum Hinzufügen des JS-Befehls: this.dataItemType = BetterDataItem;
veranlassen, der später verwendet werden kann.
Tags und Links class typescript