declare type InternalComponentOptions = { _isComponent: true; parent: Component; propsData: ?Object; _parentVnode: VNode; _parentListeners: ?Object; _renderChildren: ?Array; _componentTag: ?string; _parentElm: ?Node; _refElm: ?Node; render?: Function; staticRenderFns?: Array }; type InjectKey = string | Symbol; declare type ComponentOptions = { // data data: Object | Function | void; props?: { [key: string]: PropOptions }; propsData?: ?Object; computed?: { [key: string]: Function | { get?: Function; set?: Function; cache?: boolean } }; methods?: { [key: string]: Function }; watch?: { [key: string]: Function | string }; // DOM el?: string | Element; template?: string; render: (h: () => VNode) => VNode; renderError?: (h: () => VNode, err: Error) => VNode; staticRenderFns?: Array<() => VNode>; // lifecycle beforeCreate?: Function; created?: Function; beforeMount?: Function; mounted?: Function; beforeUpdate?: Function; updated?: Function; activated?: Function; deactivated?: Function; beforeDestroy?: Function; destroyed?: Function; errorCaptured?: () => boolean | void; // assets directives?: { [key: string]: Object }; components?: { [key: string]: Class }; transitions?: { [key: string]: Object }; filters?: { [key: string]: Function }; // context provide?: { [key: string | Symbol]: any } | () => { [key: string | Symbol]: any }; inject?: { [key: string]: InjectKey | { from?: InjectKey, default?: any }} | Array; // component v-model customization model?: { prop?: string; event?: string; }; // misc parent?: Component; mixins?: Array; name?: string; extends?: Class | Object; delimiters?: [string, string]; comments?: boolean; inheritAttrs?: boolean; // private _isComponent?: true; _propKeys?: Array; _parentVnode?: VNode; _parentListeners?: ?Object; _renderChildren?: ?Array; _componentTag: ?string; _scopeId: ?string; _base: Class; _parentElm: ?Node; _refElm: ?Node; }; declare type PropOptions = { type: Function | Array | null; default: any; required: ?boolean; validator: ?Function; }