Nuxt i18n:在 TypeScript 中使用 `nuxtI18nHead`

Nuxt i18n: Using `nuxtI18nHead` in TypeScript

我正在努力使用 nuxtI18nHead 和 TypeScript,我应该怎么做才能避免这个错误?

以下来自default.vue

代码:

import MainNavbar from '~/components/MainNavbar.vue'

export default {
  components: { MainNavbar },
  head (): any {
    return this.$nuxtI18nHead({ addSeoAttributes: true })
  }
}

错误:

 ERROR  ERROR in layouts/default.vue:18:17                                                                                                                                                 21:34:24
TS2339: Property '$nuxtI18nHead' does not exist on type '{ components: { MainNavbar: ExtendedVue<Vue, unknown, unknown, unknown, Record<never, any>>; }; head(): any; }'.
    16 |   components: { MainNavbar },
    17 |   head (): any {
  > 18 |     return this.$nuxtI18nHead({ addSeoAttributes: true })
       |                 ^^^^^^^^^^^^^
    19 |   }
    20 | }
    21 |

我使用 Vue.extend({}) 解决了这个问题,出于某种原因,我认为您不允许在 default.vue 文件中使用它。

import Vue from 'vue'
import MainNavbar from '~/components/MainNavbar.vue'

export default Vue.extend({
  components: { MainNavbar },
  head (): any {
    return this.$nuxtI18nHead({ addSeoAttributes: true })
  }
})

感谢@Kapcash 的帮助!

最好的处理方法是创建一个全局 Vue 类型 shim,这样就没有必要在所有 Vue 组件中显式 Vue.extend

创建一个类似于 types/vue-shim.d.ts 的文件,内容为:

declare module '*.vue' {
    import Vue from 'vue';
    export default Vue;
}

另请参阅 https://typescript.nuxtjs.org/guide/setup,其中记录了此设置步骤和其他与打字稿相关的设置步骤。