const childElement = child as FunctionComponentElement<MenuItemProps>
来源:6-7 功能继续升级 - SubMenu 下拉菜单编码第一部分

Nikola_shawn_7491
2022-02-15
6-7节中为什么要断言成 FunctionComponentElement 为啥不能断言成 ReactElement
写回答
1回答
-
张轩
2022-02-16
同学你好
FunctionComponentElement 就是继承自 ReactElement, 但是确定了第二个泛型的类型。
interface ReactElement<P = any, T extends string | JSXElementConstructor<any> = string | JSXElementConstructor<any>> { type: T props: P; key: Key | null; } // 多个 ref 属性,以及直接确定了 T 泛型的类型为 FunctionComponent interface FunctionComponentElement<P> extends ReactElement<P, FunctionComponent<P>> { ref?: 'ref' extends keyof P ? P extends { ref?: infer R } ? R : never : never; } // 如果在代码中使用的是 ReactElement const childElement = child as React.ReactElement<MenuItemProps> // 这行就报错了,因为 type 是个联合类型,你要手动传入正确的类型 const { displayName } = childElement.type // 所以 FunctionComponentElement 更方便,更简单,更形象(我们的 childElement 这里就是个 Function 返回的结果)
00
相似问题