【问题标题】:Typescript/Intellisesnse (wrongly?) picking up variable from another file (lib.dom.d.ts)Typescript/Intellisesnse(错误地?)从另一个文件(lib.dom.d.ts)中获取变量
【发布时间】:2021-09-08 19:57:34
【问题描述】:

今天我引用了一个未命名/未定义的变量,但 Typescript/Intellisense 没有捕捉到它,导致我的代码出现错误。变量名为“status”,Intellisense 从文件/usr/share/code/resources/app/extensions/node_modules/typescript/lib/lib.dom.d.ts 中提取了定义。 (我使用的是 Linux Ubuntu 20.04)

更多细节:

我初始化了一个基本项目来演示错误(抱歉,我似乎无法发布图片,因为声誉很低)

unamed "status" variable does not create error

单击“查找所有引用”后,我发现“状态”已在随机 lib.dom.d.ts 文件中声明

"status" has been declared in a random lib.dom.d.ts file

这似乎是因为我全局安装了 Typescript?我还在项目中安装了 Typescript;两个安装都是最新的版本“typescript@4.3.4”

我还检查了这是否只是一个特定于 VSCode 的错误,但 Sublime Text 的 LSP-typescript 也选择了相同的错误定义。

我该如何解决这个问题?

我的 tsconfig.json 如下

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "removeComments": true,
    "strict": true,
    "noImplicitAny": false,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "exlude": ["node_modules"]
}

【问题讨论】:

    标签: javascript typescript visual-studio-code intellisense


    【解决方案1】:

    类型定义正确。

    它是defined by window.status(虽然已弃用),所以status 在浏览器上下文中应该被视为一个全局变量。

    我昨天遇到了同样的问题close/window.close

    【讨论】:

    • 哇,谢谢你的回答。我希望 Typescript 文档有另一个部分来混淆像这样的变量名。那么如何指示 Typescript 不将浏览器上下文包含到我的 API 文件中呢?
    • 好的,我找到了方法。请参阅下面的答案。
    【解决方案2】:

    感谢@spender的回答,让我意识到这是Typescript的预期行为,是我错了。

    我通过在我的 tsconfig.json 中添加 "lib" option 解决了这个问题。似乎如果我排除“lib”选项,Typescript 将默认包含所有库。但我不希望“dom”库干扰我的后端代码,所以我使用:"lib": ["es2015"]

    如果我以后使用“dom”库,我想我将不得不格外小心

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多