Javascript 智能感知类型不适用于CommonJS+;节点获取 问题

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一起使用 如

使用流行的库,Intellisense无法理解
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,结果错误是您还没有使用变量。结果应该是type
    Promise
    总结一下,区别在于require和import的工作方式。为什么它适用于某些库而不适用于其他库?例如,我的问题特别涉及节点中CommonJS的自动完成。您的建议导致此错误
    语法错误:无法在模块外部使用导入语句
    我理解。我在自己尝试代码后编辑了答案。我上面介绍的是导入commonJs模块的typescript方法。如果您有这个错误,就会发生一些奇怪的事情,因为typescript应该将具有顶级导入的任何内容作为模块处理。文档建议将
    export{}
    添加到文件的顶部,以强制将其视为一个模块,尽管导入时不需要它。也许你的实际代码中没有顶级的导入?阅读本文:似乎没有比这更干净的方法了。谢谢你的帮助。你的建议“我认为一定有更好的方法获得默认导入”一针见血。