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}>(...);