Синтаксис typescript вложенной функции со стрелкой

#typescript #redux-thunk

#typescript #функция redux-thunk

Вопрос:

 export const asyncAction = (data: {
  param: string
}): AppThunk => async (dispatch) => {
  try {
    const apidata = await api({ param });
  } catch (err) {
    console.log(err);
  }
};
  

Я получаю эту ошибку «В области видимости не существует значения для сокращенного свойства ‘param’. Либо объявите ее, либо предоставьте инициализатор.»

Комментарии:

1. parma не является param

2. @crashmstr это была опечатка

3. Вы не разрушаете (или иным образом извлекаете) param из data , вам пришлось бы сделать, например, await api({ param: data.param }) .

4. @jonrsharpe да, я понимаю. Спасибо

Ответ №1:

Если вы хотите разрушить param свойство, вам придется поместить синтаксис деструктурированного объекта слева от определения типа параметра, вот так:

 export const asyncAction = ({
  param,
}: {
  param: string;
}): AppThunk => async (dispatch) => {
  // ...
  

Но в этом случае, если один параметр действительно является объектом только с param свойством, деструктурирование не поможет, потому что позже вы создаете объект с param свойством для передачи api :

 export const asyncAction = (data: { param: string; }): AppThunk => async (dispatch) => {
  try {
    const apidata = await api(data);
  } catch (err) {
    console.log(err);
  }
  // ...
};
  

Ответ №2:

Ваш метод outerscope имеет параметр, называемый data, со свойством param. В вашем методе внутренней области видимости вы пытаетесь получить доступ к параметру без данных.param

если должно быть:

 export const asyncAction = (data: {
    param: string
}): AppThunk => async (dispatch) => {
    try {
        const apidata = await api({ param: data.param });
    } catch (err) {
        console.log(err);
    }
};
  

Ответ №3:

В api({ param }); вы пытаетесь получить доступ к param тому, что хранится в data . Вам нужно data сначала «распаковать» ее, вот так: const param = data.param; , только тогда вы сможете ее использовать.

 export const asyncAction = (data: {
  param: string
}): AppThunk => async (dispatch) => {
  const param = data.param;
  try {
    const apidata = await api({ param });
  } catch (err) {
    console.log(err);
  }
};