如何访问`<script setup lang="ts">`中的`app.config.globalProperties`?

How to access `app.config.globalProperties` in a`<script setup lang="ts">`?

如何使用 <script setup lang="ts"> 访问 app.config.globalProperties

我四处寻找了几种方法:,并尝试组合以下元素:

\ main.ts

import mitt from 'mitt'
const emitter = mitt()

declare module '@vue/runtime-core' {
  export interface ComponentCustomProperties {
    emitter: typeof mitt
  }
}

app.config.globalProperties.emitter = emitter

尝试包装用于合成-api .. 也不走运

\ bus.ts

import { getCurrentInstance } from 'vue'

const app = getCurrentInstance()
const bus = app.appContext.config.globalProperties.emitter // app is undefined

export const useBus = () => ({ bus })

有两个问题:

  1. 您只能在 setup 或 Vue 组件的生命周期钩子中使用 getCurrentInstance
  2. 添加到 app.config.globalProperties 的属性直接暴露在组件实例上

所以我的首选解决方案是:

// bus.ts 

import mitt from 'mitt'

export const emitter = mitt()
export const useBus = () => ({ bus: emitter })
// main.ts

import { emitter } from `bus.ts`

declare module '@vue/runtime-core' {
  export interface ComponentCustomProperties {
    emitter: typeof emitter
  }
}

app.config.globalProperties.emitter = emitter

现在您可以在选项 API 或模板中使用 this.emitterconst { bus } = useBus()setup

尽管我可能只使用单个名称(emitterbus):)