web-dev-qa-db-ja.com

タイプスクリプトが名前ウィンドウまたはドキュメントを見つけることができません

いずれの場合も:

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"]を使用します

53
Steven Bayer

問題はES2016をターゲットにしていることが原因のようです。
あなたはそれをターゲットにしていますか? es6をターゲットにすると、エラーはおそらくなくなるでしょう。

別のオプションは、コンパイラが使用するライブラリを指定することです:

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

これによりエラーも解消されます。

コンパイラオプションのドキュメント で、ライブラリがデフォルトで使用されない理由がわかりません。--libオプションの場合:

注:--libが指定されていない場合、デフォルトのライブラリが挿入されます。挿入されるデフォルトのライブラリは次のとおりです。
►For --target ES5:DOM、ES5、ScriptHost
►--target ES6の場合:DOM、ES6、DOM.Iterable、ScriptHost

ただし、ES2016を対象とする場合のデフォルトライブラリは何であるかは記載されていません。

64
Nitzan Tomer

つかいます

"lib": ["dom"]

tsconfig.json内

例えば.

{
  "compilerOptions": {
    "lib": ["es5", "es6", "dom"],
    "outDir": "./dist/",
    "sourceMap": true,
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es6",
    "moduleResolution": "node",
    "jsx": "react"
  },
  "include": ["./src/**/*"]
}
40
Damian Green