我正在为 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;
}
我在 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
类型。
我希望使用 Vue + Vue 插件 + Typescript 的文档更好。有谁知道我能做些什么来解决这个问题?