Я работаю над созданием функции более высокого порядка, предназначенной для использования в React, но для простоты в ней нет JSX.
По сути, чего я здесь пытаюсь достичь, так это функции высшего порядка, которая собирается ввести какое-то требуемое значение в вызов функции.
То есть - функция, переданная в , которую HOF ожидает эти аргументы. И функция, которая возвращается из HOF, не будет.
Вот мой код:
Детская площадка
type CardProps = {
title: string;
somethingFromHoc: string;
}
const createCard = (props: CardProps) => props;
type HocProps = {
somethingFromHoc: string;
}
type DerivedProps<T extends {}, U extends T> = Omit<U, keyof T>;
const withSomething = <P extends HocProps>(fn: (props: P) => P) => {
return (props2: DerivedProps<HocProps, P>) => {
const newProps : P = { ...props2, somethingFromHoc: "hello" }; //Error!
return fn(newProps)
}
}
const HocCard = withSomething(createCard);
HocCard({
title: "hello"
});
Я подозреваю, что проблема заключается в DerivedProps
.
То есть DerivedProps должен быть «просто объектом, который является всем, что было в исходном типе реквизита, за исключением тех значений, которые были созданы HO C».
Когда я снова объединю их вместе, я ожидаю, что HocProps + DerivedProps = OrignalProps
всегда верно.
Я не прав?
Я всегда могу подавить эту ошибку с помощью:
const newProps : P = { ...props2, somethingFromHoc: "hello" } as P;
но есть ли сценарий, где это было бы ошибочным?
Вот упрощенная версия задачи:
const anotherThing = <P extends HocProps>(input: DerivedProps<HocProps, P>): P =>{
return {
...input,
somethingFromHoc: "hello"
};j
}