Как правильно типизировать функцию

Есть функция:

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;
→ Ссылка