typescript - hvordan legge til typer for vue-plugin?
Jeg prøver å legge til et eget plugin for Vue med TypeScript.
Men i det øyeblikket jeg bruker metoden min fra Vue-prototypen, eksisterer ikke metoden min $auth på typen myComponent. Jeg har også lagt til .d.ts for plugin, men jeg tror den er litt feil, og jeg tror også at i plugin trenger man ikke bruke install, eller trenger man? Bare i noen eksempler ser jeg ikke install, men i dokumentasjonen står det - man må bruke install.
min plugin
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>
};
}
}
komponent
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)
}
}
}
Svar #1
Funksjonen
installer et strengt krav, denne funksjonen brukes av Vue internt iVue.use(YourAwesomePlugin)for å laste pluginen din.Jeg kunne ikke få declaration file til å fungere så bra som du nevnte, men i dokumentasjonseksempler la en forfatter deklarasjonssammenslåing i en fil med logikk (ikke i en separat
d.ts). Så hvis du legger inn innholdet imyPlugin.d.tsi hovedplugin-filen din - vil den laste grensesnittet ditt og$authvil eksistere påthis.
TS-dokumenter (se Modulforsterkning-seksjonen): Deklarasjonssammenslåing
OPPDATER
For å få .d.ts-filen til å fungere, trenger du bare å importere Vue i den filen.
Vue-dokumentasjon: Utvidelse av typer for bruk med plugins