我声明了一个常量,该常量已分配给fetch
。现在,智能感知为该常数提供json
。
是因为vscode知道fetch可以返回json吗?
import {topHeadlinesURL} from 'newsAPI.js';
// Delay execution until page loads
window.addEventListener('load', ()=> {
kvetchNews();
});
async function kvetchNews(){
const res = await fetch(topHeadlinesURL);
const json = await res.json();
}
答案 0 :(得分:1)
几件事;首先:
为什么Intellisense为常数提供Json?
变量为const
与VSCode建议的方法无关。变量的类型不能确定可以在其上调用什么方法,变量的 value 可以。您的变量可以声明为var
,let
或const
,并且不会更改.json
的建议。
第二:
是因为vscode知道fetch可以返回json吗?
这表明对VSCode为您提供的功能有误解。方法是否返回JSON无关紧要(fetch
无关),VSCode建议使用方法json
,因为它知道变量所保存的对象具有json
方法。>
在这种情况下,fetch
返回一个promise,该promise解析为一个实现了Response
并提供Body
mixin的json
method对象。您正在await
兑现承诺,因此存储在变量中的值就是该响应对象,您可以在其上调用json
。
VSCode知道这一点,因为fetch
是标准且有据可查的API:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
VSCode所做的全部工作都是为您提供建议哪些方法可用的建议,从而省去了记住确切方法名称并键入它们的工作量。四字母json
方法不会节省多少,但是对于较长的方法或具有许多方法的对象来说可能很有用。