错误 TS2318:找不到全局类型“对象”

Posted

技术标签:

【中文标题】错误 TS2318:找不到全局类型“对象”【英文标题】:error TS2318: Cannot find global type 'Object' 【发布时间】:2018-11-16 04:20:33 【问题描述】:

很简单的项目,没有tsconfig.json只用命令行:

tsc --jsx react --target es6 --lib dom src/lib/Fetch.tsx

我收到以下错误,但我不明白为什么,这些类型在任何地方都有字面定义,特别是在 lib.es6.d.ts 中,我相信它包含在 --target es6

error TS2318: Cannot find global type 'Array'.
error TS2318: Cannot find global type 'Boolean'.
error TS2318: Cannot find global type 'Function'.
error TS2318: Cannot find global type 'IArguments'.
error TS2318: Cannot find global type 'Number'.
error TS2318: Cannot find global type 'Object'.
error TS2318: Cannot find global type 'RegExp'.

安装以下依赖项

"dependencies": 
  "@types/react-dom": "^16.0.6",
  "@types/react": "^16.3.16",
  "react": "^16.4.0",
  "react-dom": "^16.4.0"
,
"devDependencies": 
  "@types/node": "^10.3.1",
  "typescript": "^2.9.1"

已解决

找出我的问题。在本地安装了 typescript,但正在运行全局安装的旧版本 typescript。当我通过 npm 脚本运行 tsc 时,它使用以下命令进行编译:

tsc --jsx react --target es6 --module commonjs src/lib/Fetch.tsx

【问题讨论】:

【参考方案1】:

dom 仅包含浏览器特定 DOM 元素的定义。您需要包含 es* 库之一,其中包含编译所需的核心 es 类型。一旦你指定了 --lib 选项,你必须包含所有必要的类型,编译器将不再包含任何基于你的目标的库:

tsc --jsx react --target es6 --lib es2015,dom src/lib/Fetch.tsx

或者,如果您实际上不只是使用默认库,则可以完全省略该选项:

tsc --jsx react --target es6 src/lib/Fetch.tsx

【讨论】:

不幸的是,这些都不起作用。他们都抱怨 AbortController、csstype(在 @types/react/index.d.ts 中)以及有关 RequestInt 和信号的一些东西。我构建了一个更孤立的示例,将用详细信息更新我的问题。 @AustinFrance 例如尝试使用更高版本的 es 库版本 es2018。但是这些内置类型没有找到的具体错误是由于缺少默认的es库造成的。 我发现了问题所在。当我在本地安装了较新版本时,我正在运行全局安装的较旧版本的打字稿。如果我通过 npm 运行 tsc,我的原始代码可以正常工作,但我还必须包含 --module commonjs 以防止 @types/react 抱怨。 将您的答案标记为答案,因为仅考虑问题的上下文,添加 --lib dom 确实会产生看到的错误,而删除 --lib dom 会纠正该错误,正如您所建议的。

以上是关于错误 TS2318:找不到全局类型“对象”的主要内容,如果未能解决你的问题,请参考以下文章

错误 TS2307:找不到模块“fs”或其相应的类型声明

在 webpack 中导入 html 文件时找不到模块错误

TS错误:“找不到名称'T'如何通过泛型?

ts-node 找不到我的类型定义文件

Vue常见问题找不到模块“./App.vue”或其相应的类型声明。ts(2307)

MongoDB 找不到 Promise 类型定义