title: How to references other generic parameters for ComponentOptions in module augmentation?
body: <p>Here is what I want to do in my <code>.d.ts</code> file:</p>
  <pre><code>declare module 'vue/types/options' {
    interface ComponentOptions&lt;V extends Vue&gt; {
      beforeInstance?: (options: ComponentOptions&lt;V&gt;) =&gt; void | Promise&lt;(vm: CombinedVueInstance&lt;V, Data, Methods, Computed, Props&gt;) =&gt; any | undefined&gt;;
    }
  }
  </code></pre>
  <p>It did not work due to it don't know about <code>Data</code>, <code>Methods</code>, <code>Computed</code> and <code>Props</code>. I already tried putting those variables into <code>ComponentOptions</code> like this:</p>
  <pre><code>declare module 'vue/types/options' {
    interface ComponentOptions&lt;V extends Vue, Data=DefaultData&lt;V&gt;, Methods=DefaultMethods&lt;V&gt;, Computed=DefaultComputed, PropsDef=PropsDefinition&lt;DefaultProps&gt;, Props=DefaultProps&gt; {
      beforeInstance?: (options: ComponentOptions&lt;V&gt;) =&gt; void | Promise&lt;(vm: CombinedVueInstance&lt;V, Data, Methods, Computed, Props&gt;) =&gt; any | undefined&gt;;
    }
  }
  </code></pre>
  <p>It will break type inference in my component definition:</p>
  <pre><code>export default Vue.extend({
    data: function () {
      return {
        value: 'abc'
      };
    },
    mounted: function () {
      console.log(this.value); // This does not work.
    }
  });
  </code></pre>