実現したいこと
vue-property-decoratorを使ったTypeScriptとVueの開発の練習を始めたのですが、
axiosのグローバル化でこちらが理想とする形を作れず悩んでいます。
ネットで調べ以下のようにaxios用のファイルを作成し、App.vueで「/src/axios/index.d.ts」をインポートすると一応目的通りには動きました。
src
┣ axios
┃ ┣ index.ts
┃ ┗ index.d.ts
┣ App.vue
┣ main.ts
┣ shims-tsx.d.ts
┣ shims-vue.d.ts
...
ただ、グローバル化したaxiosを使用したいコンポーネント全てに「/src/axios/index.d.ts」をインポートする必要があります。
調べた感じですと、わざわざ*.d.tsの型定義ファイルをインポートする必要はなさそうなのですが、型定義ファイルのインポートが必要ない方法(「/src/axios/index.d.ts」をインポートしなくて良い)があればご教授をお願いいたします。
開発環境
vue/cli 4.5.12
vue version 2.6.14
axios ^0.21.1
vue-property-decorator ^9.1.2
使用したファイル
▼ /src/axios/index.ts
import Vue from 'vue' import Axios from 'axios' const axios = Axios.create({ baseURL: process.env.VUE_APP_API_BASE_URL }) Vue.prototype.$axios = axios
▼ /src/axios/index.d.ts
import Vue from 'vue' import { AxiosStatic } from 'axios' declare module 'vue/types/vue' { interface Vue { $axios: AxiosStatic } }
▼ /src/main.ts
import Vue from 'vue' import App from './App.vue' import Axios from './axios' import store from './store' Vue.config.productionTip = false Vue.use(Axios) new Vue({ store, render: (h) => h(App), }).$mount('#app')
▼ /src/App.vue
<template> <div id="app">text</div> </template> <script lang="ts"> import AxiosStatic from './axios/index.d' ↑このimport〜を書かないと「Property '$axios' does not exist on type 'App'.」とエラーが出る。 import { Component, Vue } from 'vue-property-decorator' @Component export default class App extends Vue { created(): void { this.$axios.get('API URL').then((res) => { 処理 }) } } </script>
あなたの回答
tips
プレビュー