import type { Config } from '../src/core/config' import type VNode from '../src/core/vdom/vnode' import type Watcher from '../src/core/observer/watcher' declare interface Component { // constructor information static cid: number; static options: Object; // extend static extend: (options: Object) => Function; static superOptions: Object; static extendOptions: Object; static super: Class; // assets static directive: (id: string, def?: Function | Object) => Function | Object | void; static component: (id: string, def?: Class | Object) => Class; static filter: (id: string, def?: Function) => Function | void; // public properties $el: any; // so that we can attach __vue__ to it $data: Object; $options: ComponentOptions; $parent: Component | void; $root: Component; $children: Array; $refs: { [key: string]: Component | Element | Array | void }; $slots: { [key: string]: Array }; $scopedSlots: { [key: string]: () => VNodeChildren }; $vnode: VNode; $isServer: boolean; // public methods $mount: (el?: Element | string, hydrating?: boolean) => Component; $forceUpdate: () => void; $destroy: () => void; $set: (obj: Array | Object, key: mixed, val: mixed) => void; $delete: (obj: Object, key: string) => void; $watch: (expOrFn: string | Function, cb: Function, options?: Object) => Function; $on: (event: string, fn: Function) => Component; $once: (event: string, fn: Function) => Component; $off: (event?: string, fn?: Function) => Component; $emit: (event: string, ...args: Array) => Component; $nextTick: (fn: Function) => void; $createElement: (tag?: string | Component, data?: Object, children?: VNodeChildren) => VNode; // private properties _uid: number; _isVue: true; _self: Component; _renderProxy: Component; _renderContext: ?Component; _watcher: Watcher; _watchers: Array; _data: Object; _events: Object; _inactive: boolean; _isMounted: boolean; _isDestroyed: boolean; _isBeingDestroyed: boolean; _vnode: ?VNode; _staticTrees: ?Array; _hasHookEvent: boolean; // private methods // lifecycle _init: Function; _mount: (el?: Element | void, hydrating?: boolean) => Component; _update: (vnode: VNode, hydrating?: boolean) => void; _updateFromParent: ( propsData: ?Object, listeners: ?{ [key: string]: Function | Array }, parentVnode: VNode, renderChildren: ?Array ) => void; // rendering _render: () => VNode; __patch__: (a: Element | VNode | void, b: VNode) => any; // createElement // _c is internal that accepts `normalizationType` optimization hint _c: (vnode?: VNode, data?: VNodeData, children?: VNodeChildren, normalizationType?: number) => VNode | void; // renderStatic _m: (index: number, isInFor?: boolean) => VNode | VNodeChildren; // markOnce _o: (vnode: VNode | Array, index: number, key: string) => VNode | VNodeChildren; // toString _s: (value: mixed) => string; // text to VNode _v: (value: string | number) => VNode; // toNumber _n: (value: string) => number | string; // empty vnode _e: () => VNode; // loose equal _q: (a: mixed, b: mixed) => boolean; // loose indexOf _i: (arr: Array, val: mixed) => number; // resolveFilter _f: (id: string) => Function; // renderList _l: (val: mixed, render: Function) => ?Array; // renderSlot _t: (name: string, fallback: ?Array, props: ?Object) => ?Array; // apply v-bind object _b: (data: any, value: any, asProp?: boolean) => VNodeData; // check custom keyCode _k: (eventKeyCode: number, key: string, builtInAlias: number | Array | void) => boolean; // allow dynamic method registration [key: string]: any }