解決Vue+ts里面this.$store問題
Vue+ts里this.$store問題
vuex里面我調(diào)用this.$store訪問倉庫state時,調(diào)用失敗報錯
解決辦法
(this as any).$store?
Vue實踐ts中的一些常見錯誤
mixin報錯
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函數(shù),這樣就有提示了 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() ? } }
擴展屬性報錯
我們現(xiàn)在代碼里寫一段window,然后用編輯器跳轉(zhuǎn)到其.d.ts文件中去
// 定義一個全局變量 window 類型為Window declare var window: Window; // 截取Window接口 interface Window
由于這個接口為全局接口,所以我們可以聲明一個同名全局全局接口,TS會幫我們合并
interface Window { ? // 也可以添加? ? // 字符串簽名 可以允許添加未知名稱屬性 ? [p: string]: any } // 這樣就可以使用如下代碼不報錯 import axios from 'axios' window.axios = axios
然后我們發(fā)現(xiàn)
window.axios //這里沒有屬性提示
然后我想把這個axios具體類型掛載上去,當然一想,像下面這樣做
import {AxiosStatic} from 'axios' interface Window { ? axios: AxiosStatic }
然后發(fā)現(xiàn)報錯了,window上沒有axios這個屬性,就很疑惑,嘗試改回去,仍然報錯
import {AxiosStatic} from 'axios' interface Window { ? [p: string]: any }
我就想這兩個區(qū)別就是導入了一個類型,突然想到
TS中沒有import和export的TS文件變量被視為全局
然后回去一看原本W(wǎng)indow的定義
// 注意lib.dom.d.ts這里沒有export interface Window
好的,想通了,就是因為使用import導入了一個類型,導致我自定義Window接口變成了模塊內(nèi)的,這時候的解決方案當然是看看內(nèi)置語法有沒有能顯示定義全局性的變量
// 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 //這里有屬性提示
總結(jié):需要擴展一個第三方聲明文件,需要確定其命名空間以及擴展變量實現(xiàn)的接口結(jié)構(gòu),然后復制該接口寫一次自己的類型即可
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Vue.js axios響應攔截如何獲取返回狀態(tài)碼
這篇文章主要介紹了Vue.js axios響應攔截如何獲取返回狀態(tài)碼問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01Laravel 如何在blade文件中使用Vue組件的示例代碼
這篇文章主要介紹了Laravel 如何在blade文件中使用Vue組件,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06vue改變循環(huán)遍歷后的數(shù)據(jù)實例
今天小編就為大家分享一篇vue改變循環(huán)遍歷后的數(shù)據(jù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11使用yarn?build?打包vue項目時靜態(tài)文件或圖片未打包成功的問題及解決方法
這篇文章主要介紹了使用yarn?build?打包vue項目時靜態(tài)文件或圖片未打包成功的問題及解決方法,解決方法不復雜通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-08-08詳解Vue+elementUI build打包部署后字體圖標丟失問題
這篇文章主要介紹了詳解Vue+elementUI build打包部署后字體圖標丟失問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07