1

我有一个实用功能,可以帮助在反应组件中输入检查注入的商店

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>>>;

我收到一个错误“类型'Pick'不满足约束'keyof ExpectedProps'。类型'Pick'不可分配给类型'StoreKeyToInject'。”

你能解释一下它的作用以及如何解决它吗?

4

1 回答 1

1

虽然您没有提供使用示例,但根据我对您的代码的理解,您希望返回一个新组件,该组件不会包含传入的商店storeKeysToInject

Pick从一个类型中选择属性,所以Pick<Stores, StoreKeyToInject>一个对象只包含传入的商店storeKeysToInject

Diff从类型中删除键,因此第二个参数必须是要删除的键。所以结论是你真的不需要Pick你只需要从中删除StoreKeyToInjectExpectedProps已经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>>;
于 2018-07-09T16:01:05.877 回答