這篇文章主要介紹了Vue+ts里面this.$store問題怎么解決的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Vue+ts里面this.$store問題怎么解決文章都會有所收獲,下面我們一起來看看吧。
vuex里面我調用this.$store訪問倉庫state時,調用失敗報錯
(this as any).$store
import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator' import httpminix from '../mixin/httpMixin' @Component({ mixins:[httpminix] }) export default class HelloWorld extends Vue { public async getUser() : Promise<void> { const r = await this.apiGet('/show') //HelloWorld上沒有apiGet方法 this.firstName = JSON.stringify(r.data) } }
解決方案
import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator' import httpminix from '../mixin/httpMixin' @Component // 這里從繼承Vue改成繼承Minix函數,這樣就有提示了 export default class HelloWorld extends Mixins(httpminix) { public async getUser() : Promise<void> { const r = await this.apiGet('/show') this.firstName = JSON.stringify(r.data) } public mounted() { this.getUser() } }
我們現在代碼里寫一段window,然后用編輯器跳轉到其.d.ts文件中去
// 定義一個全局變量 window 類型為Window declare var window: Window; // 截取Window接口 interface Window
由于這個接口為全局接口,所以我們可以聲明一個同名全局全局接口,TS會幫我們合并
interface Window { // 也可以添加 // 字符串簽名 可以允許添加未知名稱屬性 [p: string]: any } // 這樣就可以使用如下代碼不報錯 import axios from 'axios' window.axios = axios
然后我們發現
window.axios //這里沒有屬性提示
然后我想把這個axios具體類型掛載上去,當然一想,像下面這樣做
import {AxiosStatic} from 'axios' interface Window { axios: AxiosStatic }
然后發現報錯了,window上沒有axios這個屬性,就很疑惑,嘗試改回去,仍然報錯
import {AxiosStatic} from 'axios' interface Window { [p: string]: any }
我就想這兩個區別就是導入了一個類型,突然想到
然后回去一看原本Window的定義
// 注意lib.dom.d.ts這里沒有export interface Window
好的,想通了,就是因為使用import導入了一個類型,導致我自定義Window接口變成了模塊內的,這時候的解決方案當然是看看內置語法有沒有能顯示定義全局性的變量
// bingo 此時window.axios有提示啦 import { AxiosStatic } from "axios"; declare global { interface Window { axios: AxiosStatic } } export { };
TS為我們在模塊定義全局提供了一個方式,用于解決在模塊中擴展全局
declare global { // your type code }
擴展Vue屬性例子
import Vue from 'vue' declare module "vue/types/vue" { interface Vue { $message: string; } }
在組件類中可以這樣訪問
this.$messgae //這里有屬性提示
總結:需要擴展一個第三方聲明文件,需要確定其命名空間以及擴展變量實現的接口結構,然后復制該接口寫一次自己的類型即可
關于“Vue+ts里面this.$store問題怎么解決”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Vue+ts里面this.$store問題怎么解決”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。