Vue.prototype.$property 不适用于带有自定义插件的 Typescript(Vue 2)

时间:2021-07-19 21:35:00

标签: typescript vue.js plugins vuejs2

上下文

我正在为 OneSignal Web SDK 编写自定义插件,但我无法让 VSCode 获取插件的类型声明/代码完成等...我希望该插件可以从应用程序中的所有组件全局访问通过 custom instance $ property or global property (tried both)。 VSCode 不支持我的 Vue 界面增强。 Vue 文档非常简陋,我尝试的任何方法都不起作用。

代码

插件

我有一个插件 VueOneSignal 定义如下:

src/plugins/plugin.ts:

const VueOneSignal = {
  install(Vue: any) {
    Vue.prototype.$VueOneSignal = OneSignal as IOneSignal;
  }
}

export default VueOneSignal;

OneSignal 对象是我想在所有组件中向应用程序公开的对象,它将包含我想要的插件中的所有功能,并在上面的同一文件中定义。我希望函数可以通过 this.$VueOneSignal.init(<string>) 之类的东西调用。这里我们只有 1 个函数 init

const OneSignal: IOneSignal = {
  init(appId: string) {
    // do something
  }
}

以及上面的界面:

interface IOneSignal {
  init: (appId: string) => void;
}

plugin.d.ts

我在 src/plugins/plugin.d.ts 有一个打字文件:

interface IOneSignal {
  init: (appId: string) => void;
}

declare module 'vue/types/vue' {
  export interface Vue {
    $VueOneSignal: IOneSignal;
  }
}

what I've read is the correct way to augment Vue to 从应用及其组件中检测属性。

使用插件

在我的 main.ts 文件中,我是这样使用的:

import VueOneSignal from '@/plugins/plugin';

Vue.config.productionTip = false;
Vue.use(VueOneSignal);

调用

最后,当我进入 src/components/HelloWorld.vue 并尝试调用该函数时,它可以工作(就像在代码运行中一样)但是我收到 CLI 错误并且没有获得代码完成等 TS 好处,类型检查等...如果我将鼠标悬停在 this.$VueOneSignal 上,它会被标记为 any 类型。

VSCode screenshot

我希望使用 Vue + Vue 插件 + Typescript 的文档更好。有谁知道我能做些什么来解决这个问题?

0 个答案:

没有答案