export const PageViewTracker = ({ children }: ReactNode): ReactElement => {
usePageView();
return children;
};
- 问题:**
此函数返回错误 * 属性'children'在类型'ReactNode'上不存在 *
- 我的解决方法:**
我尝试了几种类型,但只有 * any * 工作,这不是我想要的。通常我使用reactnode作为儿童 prop ,它工作得很好。在这种情况下,typescript似乎有问题。
9条答案
按热度按时间nc1teljy1#
React〉=18
在React 18中,
FunctionalComponent
接口已更改为:请注意,在React 18之后,
PropsWithChildren
类型从功能组件的props
类型中省略,这意味着您必须自己包含children
属性:他们删除隐式
children
属性的原因可以在here中找到(React 18的Type definition release notes的source)。PropsWithChildren
类型在React的类型中仍然可用,因此如果您仍然希望像React 18之前的版本一样选择性地将children
作为 prop ,您仍然可以执行以下操作:PropsWithChildren
的类型定义为:React〈=17
出现该错误的原因是因为您将'ReactNode'接口提供给了一个对象(
{}: Type
)。children
本身的类型为ReactNode:type PropsWithChildren<P> = P & { children?: ReactNode };
您应该给予PageViewTracker指定
FunctionComponent
(或其别名FC
)类型。其具有如下接口:
因此,默认情况下,它接受类型为“ReactNode”的
children
属性。mwngjboj2#
重要提示:在react 18.0.0之后,它们会让您在每个FC接口中包含子接口。
然后你可以像老版本一样传递 prop 。
来自文档
4ioopgfo3#
对于“@类型/React”:“17.0.43”,或小于18
对于“@类型/React”〉18
3mpgtkmj4#
您可以简单地这样写:
请注意,我将
({ children }: ReactNode)
更改为({ children }: {children: ReactNode})
2cmtqfgy5#
wtlkbnrh6#
正如Dan在他的一条推文中提到的,"如果你在升级@types/react到18.0.0时遇到了关于
children
prop 的TypeScript错误,修复程序如下所示。你需要在props类型中将它们声明为一个常规 prop ,类型为React.ReactNode。"React 18
你可以在这里查看他的推文:https://twitter.com/dan_abramov/status/1512833611401150474
或者stackoverflow线程在这里:React18个TypeScript子级FC
x7rlezfr7#
你可以试试这个:
9njqaruj8#
可以在泛型类型参数中注解它的类型:
tkqqtvp19#