为什么render()返回与Type with React中的无状态功能组件不同的类型?

时间:2019-01-10 15:12:06

标签: reactjs typescript types

React组件中的render方法确实返回JSX。从React基础组件类中,我可以看出该方法返回一个ReactNode,其定义如下:

type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;

所以我的组件看起来像这样:

import React, { Component, ReactNode } from 'react'

class Foo extends Component<{}, {}> {
    render(): ReactNode {
        return <h1>bar</h1>
    }
}

无状态功能组件也会返回JSX,所以我假设它也返回了ReactNode。

import React, { ReactNode } from 'react'

const Foo = (): ReactNode => <h1>bar</h1>

但是,如果我这样做并包含此sf组件,则会收到错误消息:

TS2605: JSX element type 'ReactNode' is not a constructor function for JSX elements.

如果我使用ReactElement作为它的类型,它将起作用:

import React, { ReactElement } from 'react'

const Foo = (): ReactElement<{}> => <h1>bar</h1>

我不明白:JSX只是说React.createElement的一种方式。在render()和sf-components中,同一个函数如何有两种不同类型?

0 个答案:

没有答案