VueのPluginではVueそのもののprototypeを拡張するのだが、当然型定義がないとTypeScriptでコンパイルができない。よって型定義ファイルを作成しなければならない。やり方は公式の通り。
これで終われば話が早いが、Visual Studio CodeのVetur Pluginは不具合があるのか対応がされてないのか、Vueの型拡張を上手い具合に認識してくれない。仕方がないのでworkaroundとしてscript要素のsrc属性を利用する。
<template>...</template>
<script src="./app-impl.ts" lang="ts" />
<style>...</style>
なお執筆時点のVeturの最新版である0.23.0では、そもそもscript要素の言語をTypeScriptにすると、CPU Usageが100%近くに張り付き続ける不具合がある。これもTypeScriptの実装を別ファイルに移せば解決するようだ。(こちらを回避したいだけなら、ひとつ前のバージョンに戻すのもあり。)