Fix type lost caused by incorrect inheritance of ClassArray
This commit is contained in:
@@ -1,18 +1,18 @@
|
||||
import {Serializable} from './Serializable';
|
||||
import {UhkBuffer} from './UhkBuffer';
|
||||
|
||||
export abstract class ClassArray<T> extends Serializable<T> {
|
||||
export abstract class ClassArray<T extends Serializable<T>> extends Serializable<ClassArray<T>> {
|
||||
|
||||
elements: Serializable<T>[] = [];
|
||||
elements: T[] = [];
|
||||
|
||||
_fromJsObject(jsObjects: any): Serializable<T> {
|
||||
_fromJsObject(jsObjects: any): ClassArray<T> {
|
||||
for (let jsObject of jsObjects) {
|
||||
this.elements.push(this.jsObjectToClass(jsObject));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
_fromBinary(buffer: UhkBuffer): Serializable<T> {
|
||||
_fromBinary(buffer: UhkBuffer): ClassArray<T> {
|
||||
let arrayLength = buffer.readCompactLength();
|
||||
|
||||
if (buffer.enableDump) {
|
||||
@@ -49,6 +49,6 @@ export abstract class ClassArray<T> extends Serializable<T> {
|
||||
return `<${this.constructor.name} length="${this.elements.length}">`;
|
||||
}
|
||||
|
||||
abstract jsObjectToClass(jsObject: any): Serializable<T>;
|
||||
abstract binaryToClass(buffer: UhkBuffer): Serializable<T>;
|
||||
abstract jsObjectToClass(jsObject: any): T;
|
||||
abstract binaryToClass(buffer: UhkBuffer): T;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ export abstract class Serializable<T> {
|
||||
private static maxDisplayedJsonLength = 160;
|
||||
private static enableDump = true;
|
||||
|
||||
fromJsObject(jsObject: any): Serializable<T> {
|
||||
fromJsObject(jsObject: any): T {
|
||||
this.dump(`${this.getIndentation()}${this.constructor.name}.fromJsObject: ` +
|
||||
`${this.strintifyJsObject(jsObject)}\n`);
|
||||
Serializable.depth++;
|
||||
@@ -18,7 +18,7 @@ export abstract class Serializable<T> {
|
||||
return value;
|
||||
}
|
||||
|
||||
fromBinary(buffer: UhkBuffer): Serializable<T> {
|
||||
fromBinary(buffer: UhkBuffer): T {
|
||||
this.dump(`\n${this.getIndentation()}${this.constructor.name}.fromBinary: [`);
|
||||
Serializable.depth++;
|
||||
buffer.enableDump = Serializable.enableDump;
|
||||
@@ -38,6 +38,7 @@ export abstract class Serializable<T> {
|
||||
return value;
|
||||
}
|
||||
|
||||
// TODO: remove parameter and return the buffer
|
||||
toBinary(buffer: UhkBuffer): void {
|
||||
this.dump(`\n${this.getIndentation()}${this.constructor.name}.toBinary: ${this} [`);
|
||||
Serializable.depth++;
|
||||
@@ -49,8 +50,8 @@ export abstract class Serializable<T> {
|
||||
return value;
|
||||
}
|
||||
|
||||
abstract _fromJsObject(jsObject: any): Serializable<T>;
|
||||
abstract _fromBinary(buffer: UhkBuffer): Serializable<T>;
|
||||
abstract _fromJsObject(jsObject: any): T;
|
||||
abstract _fromBinary(buffer: UhkBuffer): T;
|
||||
abstract _toJsObject(): any;
|
||||
abstract _toBinary(buffer: UhkBuffer): void;
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import {ClassArray} from '../ClassArray';
|
||||
import {UhkBuffer} from '../UhkBuffer';
|
||||
import {Serializable} from '../Serializable';
|
||||
import {DualRoleKeystrokeAction} from './DualRoleKeystrokeAction';
|
||||
import {NoneAction} from './NoneAction';
|
||||
import {KeystrokeAction} from './KeystrokeAction';
|
||||
@@ -14,7 +13,7 @@ import {PlayMacroAction} from './PlayMacroAction';
|
||||
|
||||
export class KeyActions extends ClassArray<KeyAction> {
|
||||
|
||||
jsObjectToClass(jsObject: any): Serializable<KeyAction> {
|
||||
jsObjectToClass(jsObject: any): KeyAction {
|
||||
switch (jsObject.keyActionType) {
|
||||
case keyActionType.NoneAction:
|
||||
return new NoneAction().fromJsObject(jsObject);
|
||||
@@ -39,7 +38,7 @@ export class KeyActions extends ClassArray<KeyAction> {
|
||||
}
|
||||
}
|
||||
|
||||
binaryToClass(buffer: UhkBuffer): Serializable<KeyAction> {
|
||||
binaryToClass(buffer: UhkBuffer): KeyAction {
|
||||
let keyActionFirstByte = buffer.readUInt8();
|
||||
buffer.backtrack();
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ export class KeyMap extends Serializable<KeyMap> {
|
||||
|
||||
isDefault: boolean;
|
||||
|
||||
layers: Serializable<Layers>;
|
||||
layers: Layers;
|
||||
|
||||
_fromJsObject(jsObject: any): KeyMap {
|
||||
this.id = jsObject.id;
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
import {ClassArray} from '../ClassArray';
|
||||
import {Serializable} from '../Serializable';
|
||||
import {UhkBuffer} from '../UhkBuffer';
|
||||
import {KeyMap} from './KeyMap';
|
||||
|
||||
export class KeyMaps extends ClassArray<KeyMap> {
|
||||
|
||||
jsObjectToClass(jsObject: any): Serializable<KeyMap> {
|
||||
jsObjectToClass(jsObject: any): KeyMap {
|
||||
return new KeyMap().fromJsObject(jsObject);
|
||||
}
|
||||
|
||||
binaryToClass(buffer: UhkBuffer): Serializable<KeyMap> {
|
||||
binaryToClass(buffer: UhkBuffer): KeyMap {
|
||||
return new KeyMap().fromBinary(buffer);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import {UhkBuffer} from '../UhkBuffer';
|
||||
|
||||
export class Layer extends Serializable<Layer> {
|
||||
|
||||
modules: Serializable<Modules>;
|
||||
modules: Modules;
|
||||
|
||||
_fromJsObject(jsObject: any): Layer {
|
||||
this.modules = new Modules().fromJsObject(jsObject.modules);
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
import {ClassArray} from '../ClassArray';
|
||||
import {Serializable} from '../Serializable';
|
||||
import {UhkBuffer} from '../UhkBuffer';
|
||||
import {Layer} from './Layer';
|
||||
|
||||
export class Layers extends ClassArray<Layer> {
|
||||
|
||||
jsObjectToClass(jsObject: any): Serializable<Layer> {
|
||||
jsObjectToClass(jsObject: any): Layer {
|
||||
return new Layer().fromJsObject(jsObject);
|
||||
}
|
||||
|
||||
binaryToClass(buffer: UhkBuffer): Serializable<Layer> {
|
||||
binaryToClass(buffer: UhkBuffer): Layer {
|
||||
return new Layer().fromBinary(buffer);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ export class Macro extends Serializable<Macro> {
|
||||
|
||||
name: string;
|
||||
|
||||
macroActions: Serializable<MacroActions>;
|
||||
macroActions: MacroActions;
|
||||
|
||||
_fromJsObject(jsObject: any): Macro {
|
||||
this.id = jsObject.id;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import {ClassArray} from '../ClassArray';
|
||||
import {Serializable} from '../Serializable';
|
||||
import {UhkBuffer} from '../UhkBuffer';
|
||||
import {DelayMacroAction} from './DelayMacroAction';
|
||||
import {MacroAction, macroActionType, MacroActionId} from './MacroAction';
|
||||
@@ -18,7 +17,7 @@ import {TextMacroAction} from './TextMacroAction';
|
||||
|
||||
export class MacroActions extends ClassArray<MacroAction> {
|
||||
|
||||
jsObjectToClass(jsObject: any): Serializable<MacroAction> {
|
||||
jsObjectToClass(jsObject: any): MacroAction {
|
||||
switch (jsObject.macroActionType) {
|
||||
case macroActionType.PressKeyMacroAction:
|
||||
return new PressKeyMacroAction().fromJsObject(jsObject);
|
||||
@@ -51,7 +50,7 @@ export class MacroActions extends ClassArray<MacroAction> {
|
||||
}
|
||||
}
|
||||
|
||||
binaryToClass(buffer: UhkBuffer): Serializable<MacroAction> {
|
||||
binaryToClass(buffer: UhkBuffer): MacroAction {
|
||||
let macroActionFirstByte = buffer.readUInt8();
|
||||
buffer.backtrack();
|
||||
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
import {ClassArray} from '../ClassArray';
|
||||
import {Serializable} from '../Serializable';
|
||||
import {Macro} from './Macro';
|
||||
import {UhkBuffer} from '../UhkBuffer';
|
||||
|
||||
export class Macros extends ClassArray<Macro> {
|
||||
|
||||
jsObjectToClass(jsObject: any): Serializable<Macro> {
|
||||
jsObjectToClass(jsObject: any): Macro {
|
||||
return new Macro().fromJsObject(jsObject);
|
||||
}
|
||||
|
||||
binaryToClass(buffer: UhkBuffer): Serializable<Macro> {
|
||||
binaryToClass(buffer: UhkBuffer): Macro {
|
||||
return new Macro().fromBinary(buffer);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ export class Module extends Serializable<Module> {
|
||||
// @assertUInt8
|
||||
id: number;
|
||||
|
||||
keyActions: Serializable<KeyActions>;
|
||||
keyActions: KeyActions;
|
||||
|
||||
// @assertEnum(PointerRole)
|
||||
private pointerRole: PointerRole;
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
import {ClassArray} from '../ClassArray';
|
||||
import {Serializable} from '../Serializable';
|
||||
import {ModuleConfiguration} from './ModuleConfiguration';
|
||||
import {UhkBuffer} from '../UhkBuffer';
|
||||
|
||||
export class ModuleConfigurations extends ClassArray<ModuleConfiguration> {
|
||||
|
||||
jsObjectToClass(jsObject: any): Serializable<ModuleConfiguration> {
|
||||
jsObjectToClass(jsObject: any): ModuleConfiguration {
|
||||
return new ModuleConfiguration().fromJsObject(jsObject);
|
||||
}
|
||||
|
||||
binaryToClass(buffer: UhkBuffer): Serializable<ModuleConfiguration> {
|
||||
binaryToClass(buffer: UhkBuffer): ModuleConfiguration {
|
||||
return new ModuleConfiguration().fromBinary(buffer);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
import {ClassArray} from '../ClassArray';
|
||||
import {Module} from './Module';
|
||||
import {Serializable} from '../Serializable';
|
||||
import {UhkBuffer} from '../UhkBuffer';
|
||||
|
||||
export class Modules extends ClassArray<Module> {
|
||||
|
||||
jsObjectToClass(jsObject: any): Serializable<Module> {
|
||||
jsObjectToClass(jsObject: any): Module {
|
||||
return new Module().fromJsObject(jsObject);
|
||||
}
|
||||
|
||||
binaryToClass(buffer: UhkBuffer): Serializable<Module> {
|
||||
binaryToClass(buffer: UhkBuffer): Module {
|
||||
return new Module().fromBinary(buffer);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,11 +20,11 @@ export class UhkConfiguration extends Serializable<UhkConfiguration> {
|
||||
// @assertUInt8
|
||||
brandId: number;
|
||||
|
||||
moduleConfigurations: Serializable<ModuleConfigurations>;
|
||||
moduleConfigurations: ModuleConfigurations;
|
||||
|
||||
keyMaps: Serializable<KeyMaps>;
|
||||
keyMaps: KeyMaps;
|
||||
|
||||
macros: Serializable<Macros>;
|
||||
macros: Macros;
|
||||
|
||||
// @assertUInt32
|
||||
epilogue: number;
|
||||
|
||||
Reference in New Issue
Block a user