Typescript找不到名称窗口或文档

Ste*_*yer 56 javascript typescript typescript2.0

无论哪种情况:

document.getElementById('body');
// or
window.document.getElementById('body');
Run Code Online (Sandbox Code Playgroud)

我明白了 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"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我的答案:用于tsconfig.json我的目标es5和使用lib: ["es2015", "dom"]

Nit*_*mer 67

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

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

tsc -t ES2016 --lib "ES2016","DOM" ./your_file.ts
Run Code Online (Sandbox Code Playgroud)

这也应该使错误消失.

我不确定为什么默认情况下不使用libs,在它为该选项声明的编译器选项文档中--lib:

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

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

  • @ S.Greylyn在`tsconfig.json`中使用``lib':["dom"]`.这对我有用. (6认同)

Dam*_*een 49

使用

"lib": ["dom"]
Run Code Online (Sandbox Code Playgroud)

在tsconfig.json中

例如

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

  • FWIW这就是为我解决的问题.应该是接受的答案,因为在某些情况下(初学者工具包或工具已经为你运行`tsc`,你不是那么容易改变传递给它的CLI args,但你几乎肯定控制`tsconfig .json`) (2认同)
  • 我已将其添加到我的库中,但它仍然无法正常工作。“lib”:[“es5”,“es6”,“dom”,“dom.iterable”,“esnext”], (2认同)

Ala*_*405 29

如果您使用的bun是而不是node,那么您需要使用bun add @types/web -D

该问题的解释见https://github.com/oven-sh/bun/issues/3030

解决方案

https://github.com/oven-sh/bun/issues/463#issuecomment-1636727109

注意:将类型引用添加到您的tsconfig.json,正如 GitHub 问题上所解释的那样,看起来不是强制性的。仅安装依赖项看起来足以消除错误。

  • 谢谢。这是目前“bun”的解决方案。 (8认同)

Zik*_*oat 13

更新:为了避免将这些引用添加到每个文件,请参阅stackoverflow.com/a/77103144

我使用的是 Bun,并在相关 TypeScript 文件的顶部添加以下三斜杠指令解决了这个问题:

/// <reference lib="dom" />
/// <reference lib="dom.iterable" />
Run Code Online (Sandbox Code Playgroud)

这是因为设置"types": ["bun-types"]意味着 TypeScript 将忽略其他全局类型定义,包括lib: ["dom"].

这同样适用于其他全局类型定义库,例如 webworker。

请参阅bun 文档中的如何添加 DOM 类型以获取最新信息。