UNPKG

mobx-keystone-mindreframer

Version:

A MobX powered state management solution based on data trees with first class support for Typescript, snapshots, patches and much more

48 lines (47 loc) 2.38 kB
import type { AbstractModelClass } from "../modelShared/BaseModelShared"; import type { ModelProps, ModelPropsToData, ModelPropsToSetter } from "../modelShared/prop"; import type { AnyDataModel, BaseDataModel, BaseDataModelKeys } from "./BaseDataModel"; export declare type _ComposedData<SuperModel, TProps extends ModelProps> = SuperModel extends BaseDataModel<infer D> ? ModelPropsToData<TProps> & D : ModelPropsToData<TProps>; export interface _DataModel<SuperModel, TProps extends ModelProps> { new (data: _ComposedData<SuperModel, TProps>): SuperModel & BaseDataModel<ModelPropsToData<TProps>> & Omit<ModelPropsToData<TProps>, BaseDataModelKeys> & ModelPropsToSetter<TProps>; } /** * Base abstract class for data models that extends another model. * * @typeparam TProps New model properties type. * @typeparam TModel Model type. * @param genFn Function that returns the base model and model properties. * @returns */ export declare function ExtendedDataModel<TProps extends ModelProps, TModel extends AnyDataModel, A extends []>(genFn: (...args: A) => { baseModel: AbstractModelClass<TModel>; props: TProps; }): _DataModel<TModel, TProps>; /** * Base abstract class for data models that extends another model. * * @typeparam TProps New model properties type. * @typeparam TModel Model type. * @param baseModel Base model type. * @param modelProps Model properties. * @returns */ export declare function ExtendedDataModel<TProps extends ModelProps, TModel extends AnyDataModel>(baseModel: AbstractModelClass<TModel>, modelProps: TProps): _DataModel<TModel, TProps>; /** * Base abstract class for data models. * * Never override the constructor, use `onLazyInit` or `onLazyAttachedToRootStore` instead. * * @typeparam TProps Model properties type. * @param fnModelProps Function that generates model properties. */ export declare function DataModel<TProps extends ModelProps, A extends []>(fnModelProps: (...args: A) => TProps): _DataModel<unknown, TProps>; /** * Base abstract class for data models. * * Never override the constructor, use `onLazyInit` or `onLazyAttachedToRootStore` instead. * * @typeparam TProps Model properties type. * @param modelProps Model properties. */ export declare function DataModel<TProps extends ModelProps>(modelProps: TProps): _DataModel<unknown, TProps>;