Vue + TypeScriptにおける.vueファイルの型定義をexportしたい
shims-vue.d.ts
について
Vue + TypeScriptでプロジェクトを作ると以下のようなshims-vue.d.ts
をどこかに置くと思います.
declare module '*.vue' { import Vue from 'vue' export default Vue }
この型定義はすべての.vue
ファイルに対しての定義であり,個々の.vue
ファイルの細かい型(props
やdata
など)については定義していません.
個々の.vue
ファイルの型定義を同一ファイル内で利用する場合には問題ないですが,外部のファイルで利用する場合(ユニットテストなど)では不十分です.
解決策
.d.ts
を以下のような方針で定義するといいと思います.
Foo.d.ts
import Vue from 'vue' export interface Data { ... } export interface Methods { ... } export interface Computed { ... } export interface Props { ... } export type Component = Vue & Data & Methods & Computed & Props
Foo.vue
import Vue from 'vue' export default Vue.extend<Data, Methods, Computed, Props>({ ... })
Foo.test.ts
jest + vue-test-utils
import {shallowMount} from '@vue/test-utils' import Foo, {Component} from './Foo' test('', () => { const wrapper = shallowMount<Component>(Foo) ... })