«присваивается ограничению типа« P », но экземпляр« P »может быть создан с другим подтипом ограничения», когда используется тип утилиты Omit - PullRequest
0 голосов
/ 17 апреля 2020

Я работаю над созданием функции более высокого порядка, предназначенной для использования в 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 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...