Как правильно типизировать функцию
Есть функция:
import { Dispatch, SetStateAction } from 'react';
function setFieldError<T>(setState: Dispatch<SetStateAction<T>>, fieldName: keyof T, value: T[ keyof T ][ "error" ])
{
setState((prevState) => (
{
...prevState,
[ fieldName ]:
{
...prevState[ fieldName ],
error: value
}
}
));
}
export default setFieldError;
Я получаю ошибку:
Тип ""error"" не может использоваться для индексации типа "T[keyof T]". ts(2536)
Как ее использовать
Есть стэйт:
interface IFieldsState
{
field1: { value: string; error: boolean; };
field2: { value: string; error: boolean; };
field3: { value: string; error: boolean; };
field4: { value: string; error: boolean; };
field5: { value: string; error: boolean; };
field6: { value: string; error: boolean; };
}
const initFieldsState: IFieldsState =
{
field1: { value: "", error: false },
field2: { value: "", error: false },
field3: { value: "", error: false },
field4: { value: "", error: false },
field5: { value: "", error: false },
field6: { value: "", error: false }
};
// ...
const [ fields, setFields ] = useState<IFieldsState>(initFieldsState);
Как я применяю функцию:
setFieldError(setFields, "field1", false);
Ответы (1 шт):
Автор решения: Sergey Philippenko
→ Ссылка
function setFieldError<T extends { [fieldName: string]: { error: boolean } }>(
setState: Dispatch<SetStateAction<T>>,
fieldName: keyof T,
value: T[keyof T]['error'],
) {
setState((prevState) => ({
...prevState,
[fieldName]: {
...prevState[fieldName],
error: value,
},
}));
}
export default setFieldError;