javascripttypescripttypescript2.0

Typescript cannot find name window or document


For either case:

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

I get error TS2304: Cannot find name 'window'.

Am I missing something in tsconfig.json for a definition file I should install?

I get the message when running tsc and in 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"
    ]
}

My Answer: For use with tsconfig.json I target es5 and use lib: ["es2015", "dom"]


Solution

  • It seems that the problem is caused by targeting ES2016.
    Are you targeting that for a reason? If you target es6 the error will probably go away.

    Another option is to specify the libraries for the compiler to use:

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

    Which should also make the error go away.

    I'm not sure why the libs aren't used by default, in the docs for compiler options it states for the --lib option:

    Note: If --lib is not specified a default library is injected. The default library injected is:
    ► For --target ES5: DOM,ES5,ScriptHost
    ► For --target ES6: DOM,ES6,DOM.Iterable,ScriptHost

    But it doesn't state what are the default libraries when targeting ES2016.
    It might be a bug, try to open an issue, if you do please share the link here.