Тип Обещать универсальный от вызова, чтобы получить? - PullRequest
0 голосов
/ 19 сентября 2018

Сегодня я сталкиваюсь с небольшой проблемой при попытке набрать Обещание из звонка на fetch.

У меня есть помощник callAPI, подпись которого:

const apiCall = (url: string, requestOptions: RequestOptions = {}): Promise<{}>

Теперь я использую его в других помощниках, чья подпись выглядит примерно так:

const getProps = async (
  // args
): Promise<{}> => {
  const { someProp } = await apiCall(
    // build query with args here 
  );

  return someProp;
};

К сожалению, flow жалуется на это, и мне не удалось набрать ответВот.Cannot call await with apiCall(...) bound to p because property someProp is missing in object type [1] in type argument R [2].

     /private/tmp/flow/flowlib_65ddbae/core.js
 [2] 583│ declare class Promise<+R> {

     apiCall.js
 [1]  43│ const apiCall = (url: string, requestOptions: RequestOptions = {}): Promise<{}> => {

Есть идеи, как набрать ответ здесь без необходимости указывать все возможные свойства объекта Response в Response универсальном apiCall?Спасибо !

1 Ответ

0 голосов
/ 19 сентября 2018

Попробуйте сделать универсальный apiCall:

function apiCall<T>(url: string, requestOptions: RequestOptions = {}): Promise<T> {
  ...
}

Когда вы вызываете эту функцию, вы можете передать ей ожидаемый тип:

const { someProp } = await apiCall<{someProp: type_of_some_prop}>(...);
...