@winged/core
Version:
Morden webapp framekwork made only for ts developers. (UNDER DEVELOPMENT, PLEASE DO NOT USE)
49 lines (48 loc) • 1.73 kB
TypeScript
export declare type Override<A, B> = {
[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<A, B extends A> = {
[K in keyof A]: K extends keyof B ? B[K] : A[K];
};
export declare type Subtract<T1, T2> = Pick<T1, Exclude<keyof T1, keyof T2>>;
export interface HashMap<T> {
[name: string]: T;
}
export declare type BasicType = string | number | boolean;
export declare type OptionalGetters<T> = {
[K in keyof T]?: (...args: any[]) => T[K];
};
export declare type Optional<T> = {
[K in keyof T]?: T[K];
};
export declare type NonFuncPropNames<T> = {
[K in keyof T]: T[K] extends Function ? never : K;
}[keyof T];
export declare type NonFuncProps<T> = Pick<T, NonFuncPropNames<T>>;
export interface Constructor<T> {
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;
}