TypeScript で「window」や「document」が認識されないエラー: 原因と解決方法
TypeScript で「window」や「document」が認識されないエラーの解決方法
TypeScript で開発中に、「window」や「document」などのグローバル変数が認識されないエラーが発生することがあります。このエラーは、TypeScript コンパイラがブラウザ環境のグローバル変数を認識できていないことを示しています。
原因
このエラーが発生する主な原因は、以下の2つです。
- TypeScript コンパイラ設定 TypeScript コンパイラは、デフォルトではブラウザ環境のグローバル変数を認識するように設定されていません。そのため、これらの変数を使用するには、コンパイラ設定を変更する必要があります。
- ライブラリ 一部のライブラリは、独自のグローバル変数を定義している場合があります。これらのライブラリを使用する場合は、対応する型定義ファイルが必要になります。
解決方法
以下の方法で、このエラーを解決することができます。
TypeScript コンパイラ設定
tsconfig.json ファイルの compilerOptions
プロパティに lib
オプションを追加することで、ブラウザ環境のグローバル変数を認識するように設定することができます。
{
"compilerOptions": {
"target": "es5",
"lib": ["dom"]
}
}
ライブラリ
ライブラリが独自のグローバル変数を定義している場合は、対応する型定義ファイルが必要です。型定義ファイルは、ライブラリの公式ドキュメントからダウンロードするか、npm などのパッケージマネージャーを使用してインストールすることができます。
例
以下は、@types/jquery
型定義ファイルをインストールする例です。
npm install @types/jquery
上記の方法で解決できない場合は、以下の点を確認してみてください。
- tsconfig.json ファイルの構文
- 使用しているライブラリのバージョン
- TypeScript コンパイラのバージョン
注意事項
- TypeScript のバージョンや使用しているライブラリによって、解決方法は異なる場合があります。
- 上記の情報は、2024年5月23日時点のものです。最新の情報については、TypeScript 公式ドキュメントを参照してください。
// Add the 'dom' library to the tsconfig.json file
{
"compilerOptions": {
"target": "es5",
"lib": ["dom"]
}
}
// Access the window object
const title = window.document.title;
console.log(title); // Output: My Web Page
// Access the document object
const body = document.body;
body.style.backgroundColor = 'red';
This code will first access the window
object and then use it to get the document
object. The document
object can then be used to access various properties of the HTML document, such as the title and body.
Here is another example of how to use the window
and document
objects to create an alert box:
// Create an alert box
window.alert('Hello, world!');
// Get the current URL
const url = window.location.href;
console.log(url); // Output: https://www.example.com
This code will first create an alert box with the text "Hello, world!". It will then get the current URL of the web page and log it to the console.
You can declare global variables for the window
and document
objects. This will allow you to access them from anywhere in your code without having to use the window
or document
keywords.
declare var window: Window;
declare var document: Document;
// Access the window object
const title = document.title;
console.log(title); // Output: My Web Page
// Access the document object
const body = document.body;
body.style.backgroundColor = 'red';
Use the window and document objects as type parameters
You can use the window
and document
objects as type parameters for functions and classes. This will allow you to pass them around as arguments and access them inside of those functions and classes.
function getWindowTitle(window: Window): string {
return window.document.title;
}
const title = getWindowTitle(window);
console.log(title); // Output: My Web Page
You can create ambient declarations for the window
and document
objects. This will tell the TypeScript compiler that these objects exist and allow you to access them without having to declare them explicitly.
// Create ambient declarations for the window and document objects
declare global {
interface Window {
document: Document;
}
interface Document {
// ...
}
}
// Access the window object
const title = window.document.title;
console.log(title); // Output: My Web Page
// Access the document object
const body = document.body;
body.style.backgroundColor = 'red';
Use a polyfill
If you are using an older browser that does not support the window
and document
objects, you can use a polyfill to provide these objects. A polyfill is a piece of code that fills in the gaps in older browsers.
// Install the 'core-js' polyfill
npm install core-js
// Access the window object
const title = window.document.title;
console.log(title); // Output: My Web Page
// Access the document object
const body = document.body;
body.style.backgroundColor = 'red';
javascript typescript typescript2.0