typescript - Kom åt globalt fönstervariabel från index.html i en Vue-komponent
Om jag har en Stencil.js-komponent som jag laddar in i mitt Vue-projekt så här:
index.html:
<script type="module"
src="https://xxxxxx.s3-eu-west-1.amazonaws.com/topbar.esm.js">
</script>
<script>
window.addEventListener('topbarLoaded', function (data) {
window.topbar = data.detail;
console.log('topbar was loaded and here it is:', window.topbar);
});
</script>
Jag vill sedan nå toppfältets information i mina Vue-komponenter. Något som
VueKomponent.vue
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
@Component({
name: 'testcomp'
})
export default class PodList extends Vue {
data() {
return {
topbar: window.topbar // Error: Property 'topbar' does not exist on type 'Window & typeof globalThis'
}
}
}
</script>
Så här vill jag att allting jag har från min toppbar ska vara tillgängligt i min Vue-komponent. Som det är nu, om jag öppnar Chrome devtools kan jag skriva topbar.user och få all information om användaren, men jag vill också att denna information ska vara åtkomlig i alla Vue-komponenter.
Svar #1
Problemet är att TypeScript inte känner till den egenskapen. Du kan lösa det på flera sätt:
- Lägg till
// @ts-ignorepå föregående rad. Detta undertrycker fel på nästa rad. - Kasta till
any:(window as any).topbar - Definiera egenskapen i
window-gränssnittet:
declare global {
interface Window { topbar: any; }
}
