mobx-keystone
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.64 kB
TypeScript
import { AbstractModelClass, ModelCreationData, ModelUntransformedCreationData } from '../modelShared/BaseModelShared';
import { ModelProps, ModelPropsToSetter, ModelPropsToTransformedCreationData, ModelPropsToTransformedData, ModelPropsToUntransformedCreationData } from '../modelShared/prop';
import { AnyDataModel, BaseDataModel, BaseDataModelKeys } from './BaseDataModel';
export type _ComposedData<SuperModel, TProps extends ModelProps> = SuperModel extends AnyDataModel ? (ModelPropsToUntransformedCreationData<TProps> & ModelUntransformedCreationData<SuperModel>) | (ModelPropsToTransformedCreationData<TProps> & ModelCreationData<SuperModel>) : ModelPropsToUntransformedCreationData<TProps> | ModelPropsToTransformedCreationData<TProps>;
export interface _DataModel<SuperModel, TProps extends ModelProps> {
new (data: _ComposedData<SuperModel, TProps>): SuperModel & BaseDataModel<TProps> & Omit<ModelPropsToTransformedData<TProps>, BaseDataModelKeys> & ModelPropsToSetter<TProps>;
}
/**
* Base abstract class for data models that extends another model.
*
* @template TProps New model properties type.
* @template 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.
*
* @template TProps New model properties type.
* @template 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.
*
* @template 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.
*
* @template TProps Model properties type.
* @param modelProps Model properties.
*/
export declare function DataModel<TProps extends ModelProps>(modelProps: TProps): _DataModel<unknown, TProps>;