首頁 > web前端 > Vue.js > Vue3之getCurrentInstance與ts怎麼結合使用

Vue3之getCurrentInstance與ts怎麼結合使用

王林
發布: 2023-05-15 22:37:04
轉載
2322 人瀏覽過

getCurrentInstance與ts結合使用

vue3專案中,如果不用ts這樣使用是沒問題的

const { proxy } = getCurrentInstance()
登入後複製

在ts中使用會報錯:報錯:...類型「ComponentInternalInstance | null”

我們在專案中一般會用到很多getCurrentInstance()方法,直接封裝一下

建立useCurrentInstance.ts檔:

import { ComponentInternalInstance, getCurrentInstance } from 'vue'
export default function useCurrentInstance() {
    const { appContext } = getCurrentInstance() as ComponentInternalInstance
    const proxy = appContext.config.globalProperties
    return {
        proxy
    }
}
登入後複製

元件內使用:

<script lang="ts">
import { defineComponent } from "vue";
import useCurrentInstance from "@/utils/useCurrentInstance";
export default defineComponent({
  setup() {
    const { proxy } = useCurrentInstance();
    console.log(proxy);
  },
});
</script>
登入後複製

vue3 ts使用getCurrentInstance報錯誤

vue3中沒有this 各種api的方法 

vue3提供的方法,並建立類似this的實例。

const instance = getCurrentInstance() 

const a1= getCurrentInstance();
a1.$toast({type: &#39;error&#39;, text: &#39;登录失败&#39; });
登入後複製

這種只適合本地調試,運行到線上就會報錯,報錯詳情為:

類型“ComponentInternalInstance | null”上不存在屬性“proxy”。 ts(2339)

然後下面會報這個錯誤

Unsafe member access .$axios on an `any` value.  eslint@typescript-eslint/no-unsafe-member- access

Unsafe call of an `any` typed value.  eslint@typescript-eslint/no-unsafe-call

#原因:

getCurrentInstance()的回傳類型存在null所以在此處新增斷言即可。

在proxy後面加上?來過濾null的結果,即:

const instance = getCurrentInstance()?.proxy  
 instance ?.$toast(&#39;请xxx!&#39;)
登入後複製

以上是Vue3之getCurrentInstance與ts怎麼結合使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板