🎃
【Vue3】TypeScriptでwindow.googleと記述した際のエラーを解消する
Vue、TypeScriptを利用してGoogleMapを表示する際に、window.google
と記述した際に以下のエラーが発生したときの対処法
プロパティ 'google' は型 'Window & typeof globalThis' に存在しません。ts(2339)
結論
<template>
省略
</template>
<script lang="ts">
import { defineComponent } from 'vue';
interface GMapWindow extends Window {
google: any;
}
declare const window: GMapWindow;
export default defineComponent({
setup() {
new window.google.maps.Map(GoogleMapを表示するHTMLのref, {
・・・
解説
TypeScriptで次のように記述すると、window
にgoogle
というプロパティはないと怒られる。
window.google.maps
そのため、window
はgoogle
というプロパティを持っていることを宣言することによって、上記エラーを回避する。
1. Windowを継承したインターフェースを定義する
もともと定義されているinterface Window
を継承して新たなinterfaceを作成し、google
というプロパティを持っていることを宣言する。
<template>
省略
</template>
<script lang="ts">
import { defineComponent } from 'vue';
+ interface GMapWindow extends Window {
+ google: any;
+ }
export default defineComponent({
setup() {
new window.google.maps.Map(GoogleMapを表示するHTMLのref, {
・・・
2. アンビエント宣言でWindowの型定義をする
declare
キーワードでwindow
の型を上書きする。
以下のようにすることで、window
の型は先ほど定義したGMapWindow
として認識される。
<template>
省略
</template>
<script lang="ts">
import { defineComponent } from 'vue';
interface GMapWindow extends Window {
google: any;
}
+ declare const window: GMapWindow;
export default defineComponent({
setup() {
new window.google.maps.Map(GoogleMapを表示するHTMLのref, {
・・・
declare
について詳しく知りたい方はこちら
これでwindow.google
と記述してもエラーが表示されなくなります。
Discussion