TypeScript で「Property 'xxxx' does not exist on type 'Window'」エラーの解決方法
はじめに
Vue.js + TypeScript で CDN からスクリプトを読み込んで、xxxx.ts
で window.hoge
にアクセスするコードをビルドすると Property 'hoge' does not exist on type 'Window'.
のビルドエラーが出たので、解決方法を調べて整理した。
TL;DR
declare global
を使うdeclare global { interface Window { hoge: any } }
- ↑ の後に
window.hoge = window.hoge || {};
目次
環境・条件
1 | $ sw_vers |
詳細
問題事象
とあるパッケージで npm packages は提供されているが require
や import
が使えないため、CDN から読み込む必要があった。
public/index.html
で CDN から読み込みをし、以降は window.hoge
で該当パッケージにアクセスできるようになる、はずだった。
1 | <script src="https://foo.com/hoge.min.js"></script> |
src/xxxx.ts
1 | const hoge = window.hoge; |
上記をビルドすると、以下のエラーが出る。
1 | Property 'hoge' does not exist on type 'Window'. |
解決方法
上記を解決するには declare global { interface Window {} }
で定義を追加する。
参考: How do you explicitly set a new property on window
in TypeScript? - Stack Overflow
1 | declare global { |
上記であれば、ビルドしてもエラーにはならない。
まとめ
declare global
を使うdeclare global { interface Window { hoge: any } }
- ↑ の後に
window.hoge = window.hoge || {};
その他・メモ
TypeScript ニワカなので、もっと Better なやり方があるかも。
参考文献
- How do you explicitly set a new property on
window
in TypeScript? - Stack Overflow - TypeScriptでwindowにプロパティを追加する - sansaisoba’s tech blog
- TypeScriptでグローバル関数(windowオブジェクトのメソッド)を追加する - Engineer’s Way
関連記事
- Chart.js(vue-chartjs) でツールチップの表示内容を変更
- Vue.js で日本語変換での誤発火を抑止しつつ Enter キーで Submit
- Vue で子コンポーネントのメソッドをコールする
- apertureless/vue-chartjs でチャートの高さ(や幅、サイズ)を変更
- Chart.js で X軸, Y軸の値をカスタマイズ
- Chart.js(vue-chartjs) で凡例の一部を非表示にする方法
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア