web-dev-qa-db-fra.com

Le manuscrit ne trouve pas la fenêtre du nom ou le document

Pour les deux cas:

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

Je reçois error TS2304: Cannot find name 'window'.

Est-ce que je manque quelque chose dans tsconfig.json pour un fichier de définition à installer?

Je reçois le message lorsque je lance tsc et dans 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"
    ]
}

Ma réponse: à utiliser avec tsconfig.json Je cible es5 et utilise lib: ["es2015", "dom"]

53
Steven Bayer

Il semble que le problème soit dû au ciblage ES2016.
Ciblez-vous cela pour une raison? Si vous ciblez es6 l'erreur va probablement disparaître.

Une autre option consiste à spécifier les bibliothèques à utiliser par le compilateur:

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

Ce qui devrait aussi faire disparaître l'erreur.

Je ne suis pas sûr de savoir pourquoi les bibliothèques ne sont pas utilisées par défaut, dans le docs pour les options du compilateur il est indiqué pour le --lib option:

Remarque: Si --lib n'est pas spécifié, une bibliothèque par défaut est injectée. La bibliothèque par défaut injectée est:
► Pour --target ES5: DOM, ES5, ScriptHost
► Pour --target ES6: DOM, ES6, DOM.Iterable, ScriptHost

Mais il n’indique pas quelles sont les bibliothèques par défaut lorsqu’on cible ES2016.
Cela pourrait être un bogue, essayez d’ouvrir un problème. Si vous le faites, veuillez partager le lien ici.

64
Nitzan Tomer

utilisation

"lib": ["dom"]

dans tsconfig.json

par exemple.

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