CommonJS + node-fetch 不可用的 Intellisense 类型
Intellisense types unavailable with CommonJS + node-fetch
问题
使用流行的 node-fetch
库,Intellisense 不理解 fetch()
的 return 值。
Vim 与 coc:
VSCode 中的相同内容:
对于大多数其他库,我有类型完成功能,但这个不起作用。
我尝试过的东西
- 添加了
jsconfig.json
和 tsconfig.json
个文件
- 调查了导出一个
@types/index.d.ts
的包
- 尝试安装
@types/node-fetch
,它也经常过时
- 转换为
import
语法,有效
预期结果
正如我提到的,更改为 import
语法可以解决问题,但我希望它也能与 require
一起使用。
我如何使用 CommonJS 在这个库上进行类型补全?
const fetch = require('node-fetch');
fetch('https://github.com/')
.then(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));
(见https://www.typescriptlang.org/docs/handbook/modules.html)
请注意,我认为必须有更好的方法来获取默认导入...
解决方案
const fetch = require('node-fetch').default
说明
为了弥合 CommonJS 和 ES 模块语法之间的根本差异,require('node-fetch')
returns 具有这种形状的对象:
注意 node-fetch type definition 确实 将 fetch()
函数导出为顶层,但也导出了 default
属性为了与 ES 模块语法兼容。使用此 属性 可修复自动完成问题。
这对我来说仍然像是一个错误,但这个解决方法确实解决了这个问题。
问题
使用流行的 node-fetch
库,Intellisense 不理解 fetch()
的 return 值。
Vim 与 coc:
VSCode 中的相同内容:
对于大多数其他库,我有类型完成功能,但这个不起作用。
我尝试过的东西
- 添加了
jsconfig.json
和tsconfig.json
个文件 - 调查了导出一个
@types/index.d.ts
的包
- 尝试安装
@types/node-fetch
,它也经常过时 - 转换为
import
语法,有效
预期结果
正如我提到的,更改为 import
语法可以解决问题,但我希望它也能与 require
一起使用。
我如何使用 CommonJS 在这个库上进行类型补全?
const fetch = require('node-fetch');
fetch('https://github.com/')
.then(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));
(见https://www.typescriptlang.org/docs/handbook/modules.html)
请注意,我认为必须有更好的方法来获取默认导入...
解决方案
const fetch = require('node-fetch').default
说明
为了弥合 CommonJS 和 ES 模块语法之间的根本差异,require('node-fetch')
returns 具有这种形状的对象:
注意 node-fetch type definition 确实 将 fetch()
函数导出为顶层,但也导出了 default
属性为了与 ES 模块语法兼容。使用此 属性 可修复自动完成问题。
这对我来说仍然像是一个错误,但这个解决方法确实解决了这个问题。