我写了一个react 高阶组件 简化后形如
type Props<T> = {
value: T
}
function HOC<P extends Props<any>>(Comp: ComponentType<P>) {
type ValueType = P extends Props<infer T> ? T : never
type Example = Omit<P, 'value'> & { value1: ValueType }
return function CompWithHOC(props: Example) {
const { value1, ...rest } = props
const compProps: P = { // here
...rest,
value: value1
}
return <Comp {...compProps}></Comp>
}
}
但 compProps处有类型错误 不能将字面量识别为P 报错为
不能将类型“Omit<Example, "value1"> & { value: ValueType; }”分配给类型“P”。
"Omit<Example, "value1"> & { value: ValueType; }" 可赋给 "P" 类型的约束,但可以使用约束 "Props<any>" 的其他子类型实例化 "P"。
我希望学习如何在ts中使用拓展运算符展开和组合变量 以及高阶组件的写法
补充:
1.上述代码是简化后的结果 仅取基本含义 不代表实际内容
2.P extends Props<any>
是必要的 因为被修饰的组件可能具有其他参数 且我希望能从参数中自动获取类型(目前还没找到更好的写法)
3.ai建议的rest as Omit<P, 'value'>
已经试过 没有意义.目前尝试这一行上的类型断言都不生效