Typescript找不到名称窗口或文档

时间:2016-12-26 21:09:38

标签: javascript typescript typescript2.0

对于任何一种情况:

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

我得到error TS2304: Cannot find name 'window'.

我是否在tsconfig.json中遗漏了我应该安装的定义文件?

我在tscvscode

中运行时收到消息

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"]

2 个答案:

答案 0 :(得分:62)

问题似乎是由定位ES2016引起的 您是出于某种原因定位的吗?如果您定位es6,则错误可能会消失。

另一种选择是指定编译器使用的库:

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

这也应该使错误消失。

我不确定为什么默认情况下不会使用这些库,而是--lib它为ES2016选项所说明的内容:

  

注意:如果未指定--lib,则会注入默认库。该   注入的默认库是:
  ►对于--target ES5:DOM,ES5,ScriptHost
  ►对于--target ES6:DOM,ES6,DOM.Iterable,ScriptHost

但是,在定位b时,它没有说明默认库是什么 这可能是一个错误,尝试打开一个问题,如果你这样做,请在这里分享链接。

答案 1 :(得分:36)

使用

"lib": ["dom"]
tsconfig.json中的

e.g。

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