export interface Descriptor { type: symbol; } export interface ActionDescriptor void> extends Descriptor { fn(): T; } export interface ComputedDescriptor extends Descriptor { fn(): T; } export interface ParsedObjectDescriptor extends Descriptor { properties: T & { [key: string]: Descriptor; [key: number]: Descriptor; }; readonly: boolean; optional: boolean; } export interface ObjectDescriptor extends Descriptor { clazz: { new (): T; }; readonly: boolean; optional: boolean; } export interface OneOfDescriptor extends Descriptor { kinds: any[]; readonly: boolean; optional: boolean; } export interface ArrayOfDescriptor extends Descriptor { kind: T; readonly: boolean; optional: boolean; } export interface MapOfDescriptor extends Descriptor { kind: T; readonly: boolean; optional: boolean; } export interface ComplexDescriptor extends Descriptor { serialize: (complexValue: ComplexType) => SimpleType; deserialize: (simpleValue: SimpleType) => ComplexType; readonly: boolean; optional: boolean; } export interface BooleanDescriptor extends Descriptor { readonly: boolean; optional: boolean; } export interface NumberDescriptor extends Descriptor { readonly: boolean; optional: boolean; } export interface StringDescriptor extends Descriptor { readonly: boolean; optional: boolean; }