1. ホーム
  2. javascript

[解決済み] Typescript がウィンドウやドキュメントの名前を見つけることができない

2023-02-11 01:42:28

質問

どちらの場合でも

document.getElementById('body');
// or
window.document.getElementById('body');

私は error TS2304: Cannot find name 'window'.

で何かを見逃しているのでしょうか? tsconfig.json をインストールする必要がありますか?

を実行すると、メッセージが表示されます。 tsc というメッセージが表示され vscode

tsconfig.jsonを使用します。

{
    "compilerOptions": {
        "allowJs": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "jsx": "react",
        "module": "commonjs",
        "moduleResolution": "node",
        "noEmitOnError": true,
        "noImplicitAny": false,
        "sourceMap": true,
        "suppressImplicitAnyIndexErrors": true,
        "target": "ES2016",
        "typeRoots": [
            "node_modules/@types/",
            "typings/index.d.ts"
        ]
    },
    "exclude": [
        "node_modules",
        "**/*-aot.ts"
    ]
}

私の答え 使用方法 tsconfig.json ターゲット es5 を使用し lib: ["es2015", "dom"]

どのように解決するのですか?

ターゲティングが原因だと思われます。 ES2016 .

理由があってそれをターゲットにしているのでしょうか?もしあなたが es6 をターゲットにすれば、おそらくエラーはなくなるでしょう。

もう一つの方法は、コンパイラが使用するライブラリを指定することです。

tsc -t ES2016 --lib "ES2016","DOM" ./your_file.ts

これで、エラーも消えるはずです。

なぜlibsがデフォルトで使用されないのかよくわからないのですが、その理由は コンパイラオプションのドキュメント には --lib オプションについて述べています。

注意: --lib が指定されない場合、デフォルトのライブラリが注入されます。その場合 注入されるデフォルトのライブラリは

ターゲットES5の場合: DOM,ES5,ScriptHost

► --target ES6用。DOM,ES6,DOM.Iterable,ScriptHostを使用します。

をターゲットとした場合のデフォルトのライブラリが何であるかは記述されていません。 ES2016 .

バグかもしれませんので、issueを開いてみてください。