我有一个实用程序功能,可以帮助在检查组件中键入检查注入的存储
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'。”
能否请您解释一下它的作用以及如何解决?
答案 0 :(得分: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>>;