Javascript 智能感知类型不适用于CommonJS+;节点获取 问题
使用流行的库,Intellisense无法理解Javascript 智能感知类型不适用于CommonJS+;节点获取 问题,javascript,node.js,intellisense,Javascript,Node.js,Intellisense,使用流行的库,Intellisense无法理解fetch()的返回值 带coc的Vim: VSCode中也有同样的情况: 对于大多数其他库,我都有类型补全,但这一个不起作用 我试过的东西 添加了jsconfig.json和tsconfig.json文件 调查了导出@types/index.d.ts 已尝试安装@types/node fetch,它也经常过期 转换为import语法,有效 预期结果 正如我提到的,更改为import语法解决了这个问题,但我希望它也能与require一起使用 如
fetch()
的返回值
带coc的Vim:
VSCode中也有同样的情况:
对于大多数其他库,我都有类型补全,但这一个不起作用
我试过的东西
jsconfig.json
和tsconfig.json
文件@types/index.d.ts
@types/node fetch
,它也经常过期import
语法,有效import
语法解决了这个问题,但我希望它也能与require
一起使用
如何使用CommonJS完成此库的类型填写?
const fetch=require('node-fetch');
取('https://github.com/')
。然后(res=>res.text())
.then(body=>console.log(body))代码>这对我很有用:
import node_fetch = require("node-fetch");
const fetch = node_fetch.default;
fetch('https://github.com/')
.then(res => res.text())
.then(body => console.log(body));
(见附件)
请注意,我认为一定有更好的方法获得默认导入…解决方案
const fetch=require('node-fetch')。默认值
解释
为了弥合CommonJS和ES模块语法之间的根本差异,require('node-fetch')
返回具有以下形状的对象:
请注意,确实会将fetch()
函数导出为顶层,但也会导出default
属性以与ES模块语法兼容。使用此属性可修复自动完成问题
这对我来说仍然是一个bug,但是这个解决方法确实解决了这个问题。您好,谢谢您的帮助。我不关心节点获取的功能,只关心类型信息和通过intellisense自动完成。我更新了我的帖子,添加了一个预期结果的屏幕截图。我看不到任何问题,const result类型为any,结果错误是您还没有使用变量。结果应该是typePromise
总结一下,区别在于require和import的工作方式。为什么它适用于某些库而不适用于其他库?例如,我的问题特别涉及节点中CommonJS的自动完成。您的建议导致此错误语法错误:无法在模块外部使用导入语句
我理解。我在自己尝试代码后编辑了答案。我上面介绍的是导入commonJs模块的typescript方法。如果您有这个错误,就会发生一些奇怪的事情,因为typescript应该将具有顶级导入的任何内容作为模块处理。文档建议将export{}
添加到文件的顶部,以强制将其视为一个模块,尽管导入时不需要它。也许你的实际代码中没有顶级的导入?阅读本文:似乎没有比这更干净的方法了。谢谢你的帮助。你的建议“我认为一定有更好的方法获得默认导入”一针见血。