gpt4 book ai didi

typescript - 如何为 vue 插件添加类型?

转载 作者:行者123 更新时间:2023-12-01 03:07:32 26 4
gpt4 key购买 nike

我尝试使用类型脚本为 vue 添加自我插件。

但是当我使用 vue 原型(prototype)中的方法时,我的方法 $auth在 myComponent 类型上不存在。我还为插件添加了.d.ts,但我认为他有点不正确,而且我认为在插件中不需要使用安装,还是需要?只是在一些例子中我没有看到安装,但在文档中说 - 需要使用安装。

我的插件

import _Vue from 'vue';
import store from '@/store'
import * as firebase from 'firebase';

export default {
install: (Vue: typeof _Vue, options?: any) => {
const base = firebase.initializeApp(config);
const auth = firebase.auth();
Vue.prototype.$auth = {
login: async (username: string, pass: string) => {
return await auth.signInWithEmailAndPassword(username, pass)
},
logout: async () => {
await auth.signOut()
}
};
auth.onAuthStateChanged((user: any) => {
store.commit('updateUser',{ user })
})
}
}

myPlugin.d.ts
declare module 'vue/types/vue' {
interface Vue {
$auth: {
login: (username: string, pass: string) => Promise<any>
};
}
}

组件
export default class SignUp extends Vue {
email: string = '';
password: string = '';

async onSubmit(){
if ((this.$refs.form as any).validate()) {
const auth = await this.$auth.login(this.email, this.password)
}
}


}

最佳答案

  • install函数是一个严格的要求,这个函数是 Vue 内部在 Vue.use(YourAwesomePlugin) 中使用的。加载你的插件。
  • 我无法使声明文件像您提到的那样工作,但是在文档示例中,作者将声明合并到具有逻辑的文件中(而不是单独的 d.ts )。因此,如果您将 myPlugin.d.ts 的内容放在到一个主插件文件 - 它会加载你的界面和$auth将存在于 this .

  • TS Docs(见模块扩充部分): Declaration Merging

    更新

    制作 .d.ts文件工作,您只需要在该文件中导入 vue。

    Vue 文档: Augmenting Types for Use with Plugins

    关于typescript - 如何为 vue 插件添加类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55311595/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com