export declare type Override = { [K in keyof (A & B)]: K extends keyof A ? (K extends keyof B ? B[K] : A[K]) : (K extends keyof B ? B[K] : never); }; /** like override but can only refining/overwrite existing keys, not adding keys */ export declare type Overwrite = { [K in keyof A]: K extends keyof B ? B[K] : A[K]; }; export declare type Subtract = Pick>; export interface HashMap { [name: string]: T; } export declare type BasicType = string | number | boolean; export declare type OptionalGetters = { [K in keyof T]?: (...args: any[]) => T[K]; }; export declare type Optional = { [K in keyof T]?: T[K]; }; export declare type NonFuncPropNames = { [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]; export declare type NonFuncProps = Pick>; export interface Constructor { new (...args: any[]): T; } export interface IView { insertAfter(prevSiblingNode: Node): void; appendTo(container: HTMLElement): void; } export interface ViewState { [key: string]: BasicType | ViewState[] | ViewState; } export interface StateDependencies { [statePath: string]: StateDependencies; } /** RSD for RenderableStateDescriber */ export interface RSDObject { [key: string]: true | RenderableStateDescriber; } /** RSD for RenderableStateDescriber */ export interface RSDList { [idx: number]: true | RenderableStateDescriber; } export declare type RenderableStateDescriber = RSDObject | RSDList; /** ModificationTree represents which fields were changed, Empty object represents the whole object changed */ export interface ModificationTree { [mField: string]: ModificationTree; }