React Hooks中forwardRef里面的泛型疑问?

// 子组件
const TabItemChildren = forwardRef<RefHandle, ChildProps>((props, ref) = {})

RefHandle是子组件通过钩子useImperativeHandle中返回的对象类型声明,即抛给父组件中的ref上的属性的类型声明

image.png

image.png

为什么这个泛型是这样的, 这俩个泛型参数顺序不能更换, 我有点看不懂

阅读 3k
4 个回答

猜测应该是出于props可能不需要显示定义类型的考虑

function forwardRef<T, P = {}>(render: ForwardRefRenderFunction<T, P>): ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<T>>;

这是官方类型定义,可以看到props是可选的【默认{}】,可选的泛型只能放在后面,至于render里为什么是props在前,而不跟泛型一致,估计是因为先有的实现才加的类型吧。这方面的原因可能得翻看下git提交历史才能知道

forwardRef的写法就这么定义的,你也可以自己改下

如果你想了解原理,去看一下源代码吧

推荐问题
logo
Microsoft
子站问答
访问
宣传栏