Typescript找不到名称窗口或文档

问题描述 投票:47回答:2

无论哪种情况:

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

javascript typescript typescript2.0
2个回答
63
投票

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

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

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

这也应该使错误消失。

我不确定为什么默认情况下没有使用libs,在docs for compiler options中它为--lib选项声明:

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

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


35
投票

使用

"lib": ["dom"]

在tsconfig.json中

EG

{
  "compilerOptions": {
    "lib": ["es5", "es6", "dom"],
    "outDir": "./dist/",
    "sourceMap": true,
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es6",
    "moduleResolution": "node",
    "jsx": "react"
  },
  "include": ["./src/**/*"]
}
© www.soinside.com 2019 - 2024. All rights reserved.