TypeScriptでwindow配下のオブジェクトが見つからないエラー

現象

window.solanaというオブジェクトが見つからないと言われる。

console.log(window.solana);

=> Property 'solana' does not exist on type 'Window & typeof globalThis'.

JavaScriptやcreate-react-appするとwindow.solanaがうまく参照できるのに、TypeScriptだと見つからないと言われる。

原因

JavaScriptだとwindowオブジェクト配下が参照できるが、TypeScriptだと挙動が若干変わり、パターンによって対応方法が異なる。

対応

自分のケースだと案1、案2いずれも動作した。ただし、パターンによって異なるようなので、詳細は参考サイトを参照。

案1:window as any

window as anyを追加するだけ。

console.log((window as any).solana);

案2:interfaceで定義

tsconfig.jsonでlib: dom指定していた場合は、interfaceで追加したいオブジェクトを指定する。

interface Window {
  solana: any
}
declare var window: Window

console.log(window.solana);

参考サイト