Javascript 从调用到获取键入Promise-generic?
今天,我在尝试从调用Javascript 从调用到获取键入Promise-generic?,javascript,promise,flowtype,fetch-api,Javascript,Promise,Flowtype,Fetch Api,今天,我在尝试从调用fetch键入承诺时遇到了一个小问题 我有一个callAPIhelper,其签名是: const apiCall=(url:string,requestOptions:requestOptions={}): 承诺 现在,我在其他助手中使用它,其签名如下: const getProps = async ( // args ): Promise<{}> => { const { someProp } = await apiCall( // bui
fetch
键入承诺时遇到了一个小问题
我有一个callAPI
helper,其签名是:
const apiCall=(url:string,requestOptions:requestOptions={}):
承诺
现在,我在其他助手中使用它,其签名如下:
const getProps = async (
// args
): Promise<{}> => {
const { someProp } = await apiCall(
// build query with args here
);
return someProp;
};
您知道如何在这里键入响应而不必在
apiCall
的response
generic中提供响应对象的所有可能属性吗?谢谢 尝试将apiCall设置为通用:
function apiCall<T>(url: string, requestOptions: RequestOptions = {}): Promise<T> {
...
}
函数apiCall(url:string,requestOptions:requestOptions={}):Promise{
...
}
调用此函数时,可以将预期类型传递给它:
const { someProp } = await apiCall<{someProp: type_of_some_prop}>(...);
const{someProp}=wait apiCall(…);
谢谢Stefan!那正是我所需要的,我怎么能不想到呢。。啊,早上:)没问题@AlexandreGomes,我很高兴能帮上忙。如果此答案解决了您的问题,请将其标记为您问题的解决方案。干杯实际上,虽然这在理论上是可行的@stefan orzu,但我遇到了一些语法问题。这很可能与webpack
flow transform不解析该语法有关,因为它似乎是一个相当新的功能(本月早些时候):“老实说,我对flow不太了解,我的jam是typescript:),但相同的原则适用于所有支持泛型的类型化语言,因此,试着看看您是否可以将其适应您正在使用的特定版本的流。流中是否有任何类型?@bergi有,但我尽量避免它,否则使用静态类型检查器就没有意义了。另外,太多的改进……)但是apiCall确实不知道它的类型,所以在那里是合适的。然后在每次调用时,您都会将结果类型细化到您期望的类型。
const { someProp } = await apiCall<{someProp: type_of_some_prop}>(...);