Определить тип возвращаемого значения из отправки - PullRequest
2 голосов
/ 05 августа 2020

Я кодирую функциональный компонент в сокращении и добавляю возвращаемые значения для определенного c действия. Новое значение поступает из Promise, поэтому, если тип называется Ival, возвращаемое значение будет иметь тип Promise<Ival | null> (null в случае неудачного ответа). Мой вопрос: как определить тип возвращаемого значения Ival?

Это действие:

export const addVal = (data: IData) => async (dispatch: IDispatch): Promise<IVal | null> => {
  try {
    const resp = await api.vals.create(data);
    dispatch({ type: "CREATE_VAL", payload: resp });
    return resp;
  } catch (error) {
    dispatch({ type: "ERROR_MSG" ,payload: error });
    return null;
  }
};

это функция, которую я использую для отправки:

const createNewConnection = async (data: IData): Promise<void> => {

  try {
    const newVal: IVal | null = await dispatch(addVal(data));
    onValCreated(newVal);
  } catch (e) {
    onValCreated(null);
  }
};

Функция onValCreated получает тип IVal в качестве аргумента, и это сообщение об ошибке:

"TS2559: Type '(dispatch: IDispatch) => Promise' не имеет свойства, общие с типом 'IVal' "

Я пробовал отправить оба:

// First try
const newVal: IVal | null = await dispatch<IVal | null>(addVal(data));

// Second try
const newVal: IVal | null = await dispatch<Promise<IVal | null>>(addVal(data));

Но это не сработало

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

действие возвращает функцию, которая получает отправку в качестве аргумента, а затем возвращает желаемое значение. поэтому я создал константу, которая выполняет действие, а затем выполняет эту переменную с диспетчером. наконец, он возвращает обещание того типа, который я хотел!

 try {
  const newVal = await addVal(data);
  onValCreated(await newVal(dispatch));
} catch (e) {
  onValCreated(null);
}
0 голосов
/ 05 августа 2020

Ключевое слово await в основном «распаковывает» Promise в JS, ожидает Promise<number>, вернет вам number, что означает, что у вас уже есть правильный подход. Но судя по всему, вы пытались применить это правило не в том месте. Вам не нужно ждать, когда вызывает , но когда вы имеете дело с возвращенным значением из функции (означает: при передаче параметров onValCreated, а не dispatch). Однако сообщение об ошибке дает вам функцию отправки, поскольку именно отсюда вы получаете «неправильный тип».

Исправление небольшое, просто сделайте что-нибудь вроде этого и «распакуйте» Promise с «вложенным» ждать:

const newVal: IVal | null = await dispatch(await addVal(data));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...