最近在实现input组件时需要对函数组件实现引用, 然后找到了forwardRef这个组件 在泛型中必须先有ref的参数类型, 其次才是props的参数类型, 这与后面的参数的顺序是相返的
不知道为什么会这样, 在网上也没找到相关的答案, 然后就硬着头皮点开源码进去看看, 发现也不过如此
让我们分解这个类型定义:
function forwardRef<T, P = {}>(...): 这定义了一个函数forwardRef,它接受两个泛型参数T和P。T通常用于指定ref的类型,而P用于指定组件的属性(props)的类型。P有一个默认值{},这意味着如果你不提供第二个泛型参数,它将默认为一个空对象。render: ForwardRefRenderFunction<T, P>: 这是forwardRef函数的第一个参数,render是一个函数,它的类型是ForwardRefRenderFunction<T, P>。ForwardRefRenderFunction是一个预定义的类型,它要求你传递一个函数,这个函数接受两个参数:props和ref,其中props的类型是P,ref的类型是T。): ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<T>>;: 这部分是函数的返回类型。ForwardRefExoticComponent是一个特殊的组件类型,它允许你创建一个可以接收ref的组件。PropsWithoutRef<P>是一个辅助类型,它从P中移除了ref属性,因为ref将通过forwardRef直接转发,不需要在props中再次出现。RefAttributes<T>是一个包含ref属性的类型,它将ref添加到组件的属性中。
继续进入ForwardRefRenderFunction<T, P>
答案显而易见了, 源码中就是先T,P 后P,T
不知道为什么官方这样设计, 挺糊弄人的