Вы можете использовать ключевое слово typeof
TS, чтобы вывести тип setValue
и аннотировать его на wrappedSetValue
.
const wrappedSetValue: typeof setValue = (value: string) => setValue(value.toUpperCase());
Честно говоря, это своего рода чит-код React.Dispatch<React.SetStateAction<string>>
на самом деле псевдоним типа, который сводится к
(value: string | ((s: string) => string)) => void;
Таким образом, приведенная выше реализация охватывает только половину сигнатуры типа.
Я не уверен, что это то, что вам нужно, но для выполнения объявления подписи вы должны также реализовать другую половину, которая позволяет передавать функцию в качестве параметра:
const wrappedSetValue: typeof setValue = (value: string | ((s: string) => string)) =>
typeof value == 'string' ? setValue(value.toUpperCase()) : setValue(value);