Вам нужно сделать ваш хук общей функцией c, чтобы получить желаемое поведение.
interface IForm1 {
name?: string;
description?: string;
}
interface IForm2 {
word?: string;
}
type FormTypes = IForm1 | IForm2;
const useForm = <T extends FormTypes>(initialState: T) => {
const [values, setValues] = useState(initialState);
return { values };
};
Кроме того, вам необходимо изменить возвращаемое значение, чтобы оно соответствовало вашей деструктуризации. Если вы планируете деструктурировать результат как массив const [values] = useForm(...)
, тогда вам нужно вернуть массив.
const useForm = <T extends FormTypes>(initialState: T) => {
const [values, setValues] = useState(initialState);
return [values];
};
Или, более кратко, если вы не против вернуть возможность setValues
в звонящий
const useForm = <T extends FormTypes>(initialState: T) => useState(initialState);