text: // * 虚拟node相关
  declare type VNodeChildren = Array<?VNode | string | VNodeChildren> | string;
  
  declare type VNodeComponentOptions = {
    Ctor: Class<Component>;
    propsData: ?Object;
    listeners: ?Object;
    children: ?Array<VNode>;
    tag?: string;
  };
  
  declare type MountedComponentVNode = {
    context: Component;
    componentOptions: VNodeComponentOptions;
    componentInstance: Component;
    parent: VNode;
    data: VNodeData;
  };
  
  // interface for vnodes in update modules
  declare type VNodeWithData = {
    tag: string;
    data: VNodeData;
    children: ?Array<VNode>;
    text: void;
    elm: any;
    ns: string | void;
    context: Component;
    key: string | number | void;
    parent?: VNodeWithData;
    componentOptions?: VNodeComponentOptions;
    componentInstance?: Component;
    isRootInsert: boolean;
  };
  
  declare interface VNodeData {
    key?: string | number;
    slot?: string;
    ref?: string;
    is?: string;
    pre?: boolean;
    tag?: string;
    staticClass?: string;
    class?: any;
    staticStyle?: { [key: string]: any };
    style?: string | Array<Object> | Object;
    normalizedStyle?: Object;
    props?: { [key: string]: any };
    attrs?: { [key: string]: string };
    domProps?: { [key: string]: any };
    hook?: { [key: string]: Function };
    on?: ?{ [key: string]: Function | Array<Function> };
    nativeOn?: { [key: string]: Function | Array<Function> };
    transition?: Object;
    show?: boolean; // marker for v-show
    inlineTemplate?: {
      render: Function;
      staticRenderFns: Array<Function>;
    };
    directives?: Array<VNodeDirective>;
    keepAlive?: boolean;
    scopedSlots?: { [key: string]: Function };
    model?: {
      value: any;
      callback: Function;
    };
  };
  
  declare type VNodeDirective = {
    name: string;
    rawName: string;
    value?: any;
    oldValue?: any;
    arg?: string;
    oldArg?: string;
    modifiers?: ASTModifiers;
    def?: Object;
  };
  
  declare type ScopedSlotsData = Array<{ key: string, fn: Function } | ScopedSlotsData>;
  