///
import type { Any, EmptyObject } from '@web-io/common/es/types';
/**
* 扩展`tinyapp.ComponentOptions`支持组件实例额外属性泛型, see `mini-types/types/component.d.ts`.
*
* @template P Type of component properties.
* @template D Type of component data.
* @template M Type of component methods.
* @template ExtendThis Type of extended component instance, 可用于扩展组件内部属性.
*/
declare type ComponentOptions
= Record, D = Any, M extends tinyapp.IComponentMethods = tinyapp.IComponentMethods, ExtendThis = EmptyObject> = tinyapp.IComponentLifeCycleMethods & {
/**
* 组件间代码复用机制
*/
mixins?: ComponentOptions[];
/**
* 组件内部状态
*/
data?: D;
/**
* 为外部传入的数据设置默认值
*/
props?: P;
/**
* 组件的方法,可以是事件响应函数或任意的自定义方法
*/
methods?: M & ThisType & M & ExtendThis>;
} & ThisType & M & ExtendThis>;
/**
* @template P Type of component properties.
* @template D Type of component data.
* @template M Type of component methods.
* @template ExtendThis Type of extended component instance, 可用于扩展组件内部属性.
*/
declare type ICreateComponentOptions = ComponentOptions
& {
/**
* 将全局对象的值 map 到当前组件的 data.
*/
mapGlobalDataToData?: Record;
};
/**
* miniu data createComponent data泛型参数支持.
*
* @template P Type of component properties.
* @template D Type of component data.
* @template M Type of component methods.
* @template ExtendThis Type of extended component instance, 可用于扩展组件内部属性. 注:组件选项中除了已定义选项,多余的选项不会注入到组件实例上,只能在组件方法中自行注入.
* @template G Type of map global data to data, 全局数据映射到组件上为只读, 由于全局数据通过`setGlobalData`修改,所以将其设置为partial.
* @param options Component options.
* @returns Component instance.
*/
declare function createComponent, D = Record, M extends tinyapp.IComponentMethods = tinyapp.IComponentMethods, ExtendThis = EmptyObject, G = EmptyObject>(options: ICreateComponentOptions>, M, ExtendThis>): ComponentOptions
>, M, ExtendThis>;
export default createComponent;
export type { ComponentOptions, ICreateComponentOptions };