title: Importing vue typescript type definitions
body: <p>I am trying to reference the typescript definitions for vue in my main file <code>entry.ts</code>.</p>
  
  <p>Here is 'entry.ts' located at src/js/entry,ts,
  the type definition for vue is located at src/js/lib/bower/vue/types/index.d.ts</p>
  
  <pre><code>/// &lt;reference path='./lib/typings/jquery.d.ts' /&gt;
  /// &lt;reference path='./lib/bower/vue/types/index.d.ts' /&gt;
  
  let data: Object = {},
      app: Vue = new Vue({
          data: data,
          el: '#app'
      });
  console.log(app);
  
  class Test {
      private id: string;
      constructor(id: string) {
          this.id = id;
      }
      public getElement(): any {
          return $(this.id);
      }
  }
  console.log(new Test('asdf').getElement());
  </code></pre>
  
  <p>When this file gets compiled, the output is as follows.
  BTW typescript is targeting es6 with es6 modules.</p>
  
  <pre><code>[steventheevil@Steven-PC webdev-starter]$ tsc
  src/js/entry.ts(5,10): error TS2304: Cannot find name 'Vue'.
  src/js/entry.ts(5,20): error TS2304: Cannot find name 'Vue'.
  </code></pre>
  
  <p>The JQuery works fine (it looks like), so I replace the reference to the vue type definition with an import.</p>
  
  <pre><code>/// &lt;reference path='./lib/typings/jquery.d.ts' /&gt;
  import * as Vue from './lib/bower/vue/types/index';
  
  let data: Object = {},
      app: Vue = new Vue({
          data: data,
          el: '#app'
      });
  console.log(app);
  
  class Test {
      private id: string;
      constructor(id: string) {
          this.id = id;
      }
      public getElement(): any {
          return $(this.id);
      }
  }
  console.log(new Test('asdf').getElement());
  </code></pre>
  
  <p>It compiles fine, here's the output:</p>
  
  <pre><code>import * as Vue from '../../src/js/lib/bower/vue/types/index';
  let data = {}, app = new Vue({
      data: data,
      el: '#app'
  });
  console.log(app);
  class Test {
      constructor(id) {
          this.id = id;
      }
      getElement() {
          return $(this.id);
      }
  }
  console.log(new Test('asdf').getElement());
  </code></pre>
  
  <p>The problem is that the import statement for the type definition is not removed. This causes an error later when I use rollup with babel (I don't use the rollup plugin for ts because I need to manipulate the files between rollup and ts). How do I tell the typescript compiler to remove imports for type definitions (.d.ts files)?</p>
  
  <p>Here's the type definition for vue (src/jslib/bower/vue/types/index.d.ts)</p>
  
  <pre><code>import * as V from "./vue";
  import * as Options from "./options";
  import * as Plugin from "./plugin";
  import * as VNode from "./vnode";
  
  // `Vue` in `export = Vue` must be a namespace
  // All available types are exported via this namespace
  declare namespace Vue {
    export type CreateElement = V.CreateElement;
  
    export type Component = Options.Component;
    export type AsyncComponent = Options.AsyncComponent;
    export type ComponentOptions&lt;V extends Vue&gt; = Options.ComponentOptions&lt;V&gt;;
    export type FunctionalComponentOptions = Options.FunctionalComponentOptions;
    export type RenderContext = Options.RenderContext;
    export type PropOptions = Options.PropOptions;
    export type ComputedOptions&lt;V extends Vue&gt; = Options.ComputedOptions&lt;V&gt;;
    export type WatchHandler&lt;V extends Vue&gt; = Options.WatchHandler&lt;V&gt;;
    export type WatchOptions = Options.WatchOptions;
    export type DirectiveFunction = Options.DirectiveFunction;
    export type DirectiveOptions = Options.DirectiveOptions;
  
    export type PluginFunction&lt;T&gt; = Plugin.PluginFunction&lt;T&gt;;
    export type PluginObject&lt;T&gt; = Plugin.PluginObject&lt;T&gt;;
  
    export type VNodeChildren = VNode.VNodeChildren;
    export type VNodeChildrenArrayContents = VNode.VNodeChildrenArrayContents;
    export type VNode = VNode.VNode;
    export type VNodeComponentOptions = VNode.VNodeComponentOptions;
    export type VNodeData = VNode.VNodeData;
    export type VNodeDirective = VNode.VNodeDirective;
  }
  
  // TS cannot merge imported class with namespace, declare a subclass to bypass
  declare class Vue extends V.Vue {}
  
  export = Vue;
  </code></pre>
  
  <p>Any help is appreciated, thank you.</p>