#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);
}
};