Ошибка приведения универсального типа Typescript

У меня есть служебная функция, которая помогает вводить проверки введенных хранилищ в реагирующем компоненте.

import { Diff } from 'typelevel-ts';
import * as React from 'react';

export type TypedInject<Stores> = <StoreKeyToInject extends keyof 
 Stores>(
 ...storeKeysToInject: StoreKeyToInject[]
 ) => <ExpectedProps extends Pick<Stores, StoreKeyToInject>>(
  component: React.ComponentType<ExpectedProps>
 ) => React.ComponentType<Diff<ExpectedProps, Pick<Stores, 
  StoreKeyToInject>>>;

Я получаю сообщение об ошибке «Тип« Выбор »не удовлетворяет ограничению« keyof ExpectedProps ». Тип« Выбор »не может быть назначен типу« StoreKeyToInject ».

Не могли бы вы объяснить, что он делает и как это исправить?


person AnoopN    schedule 09.07.2018    source источник


Ответы (1)


Хотя вы не приводите пример использования, насколько я понимаю ваш код, вы хотите вернуть новый компонент, у которого не будет хранилищ, переданных в storeKeysToInject.

Pick выбирает свойства из типа, поэтому Pick<Stores, StoreKeyToInject> является объектом, содержащим только хранилища, переданные в storeKeysToInject.

Diff удаляет ключи из типа, поэтому вторым параметром должны быть ключи, которые нужно удалить. Итак, вывод: вам действительно не нужен Pick, вам просто нужно удалить StoreKeyToInject из ExpectedProps (StoreKeyToInject уже будет ключом Stores, поэтому нет необходимости снова вводить Stores в обсуждение)

export type TypedInject<Stores> = 
    <StoreKeyToInject extends keyof Stores>(...storeKeysToInject: StoreKeyToInject[]) 
        => <ExpectedProps extends Pick<Stores, StoreKeyToInject>> (component: React.ComponentType<ExpectedProps>) 
            => React.ComponentType<Diff<ExpectedProps, StoreKeyToInject>>;
person Titian Cernicova-Dragomir    schedule 09.07.2018