Der @types/react
中,全局 JSX
-Namespace ist veraltet:
declare global { /** * @deprecated Use `React.JSX` instead of the global `JSX` namespace. */ namespace JSX { ... } }
Seit ich ESLints deprecation/deprecation
规则(来自插件 eslint-plugin-deprecation
aktiviert habe, erhalte ich jetzt eine Fehlermeldung für den Rückgabetyp der Funktionskomponente wie folgt:
export default function TestComponent(): JSX.Element { // This JSX is marked as deprecated return ( <span>Test</span> ); }
Seit global JSX
命名空间已被弃用,那么在这种情况下 JSX.Element
was ist der richtige Rückgabetyp-Ersatz?
Ist es React.JSX.Element
wie in der Einstellungsmeldung angegeben:
export default function TestComponent(): React.JSX.Element { ... }
oder ReactElement
so:
import { ReactElement } from "react"; export default function TestComponent(): ReactElement { ... }
Oder noch besser: Deklarieren Sie die Funktionskomponente mit React.FC
und lassen Sie TypeScript den Rückgabetyp ableiten, etwa so:
export const TestComponent: React.FC = () => { ... };
使用
React.JSX
。或者从
"react"
导入JSX
:直接使用
React.ReactElement
(或者更准确地说,React.ReactElement | null
):这正是(不再推荐)
React.FC
强制执行:它也是
JSXElementConstructor
:话虽这么说,除非您有一些规则强制您输入函数组件返回类型,否则您可以为了简单起见而忽略它:
显然,该功能现在可以返回任何内容,Typescript不会抱怨...除非您尝试将其用作JSX模板中的功能组件,否则在fb/cra#8177: