Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何基于JSX约束函数的返回类型?_Reactjs_Typescript_Jsx - Fatal编程技术网

Reactjs 如何基于JSX约束函数的返回类型?

Reactjs 如何基于JSX约束函数的返回类型?,reactjs,typescript,jsx,Reactjs,Typescript,Jsx,我想创建一个函数,返回类型应该返回一个特定的JSX类型 例如: const setHosting : <GitlabLogo> | <GithubLogo> = (h: Hosting) => ??? const setHosting:|=(h:Hosting)=>??? 此处返回类型应为或。可能吗?简言之——不,不可能 如果希望函数返回JSX元素(即),则不能要求它是特定类型,因为所有JSX元素都是类型JSX.element 如果您想让函数返回组件(例如,Gi

我想创建一个函数,返回类型应该返回一个特定的JSX类型

例如:

const setHosting : <GitlabLogo> | <GithubLogo> = (h: Hosting) => ???
const setHosting:|=(h:Hosting)=>???
此处返回类型应为
。可能吗?

简言之——不,不可能

如果希望函数返回JSX元素(即
),则不能要求它是特定类型,因为所有JSX元素都是类型
JSX.element

如果您想让函数返回组件(例如,
GithubLogo
),那么您可以做得更好一点,但不会做得更好。请记住,Typescript是结构化的,而不是名义上的类型。如果
gitallogo
是一个不带道具的函数组件,并返回一个
JSX.Element
,那么任何不带道具的函数组件都可以分配给
typeofgitallogo
。因此,您不能需要特定的组件。您只能需要特定的道具类型

type Hosting = "gitlab" | "github";

// return an element
const setHostingA = (h: Hosting): JSX.Element => h === "github" ? <GithubLogo/> : <GitlabLogo/>;

// return a component
const setHostingB = (h: Hosting): React.ComponentType<{}> => h === "github" ? GithubLogo : GitlabLogo;
const HostingComponent = setHostingB("github");
const element = <HostingComponent/>

// call as a component - return an element
const HostingLogo = ({hosting}: {hosting: Hosting}): JSX.Element => {
    const Component = hosting === "github" ? GithubLogo : GitlabLogo;
    return <Component/>;
}
const a = <HostingLogo hosting="github"/>;
const b = <HostingLogo hosting="gitlab"/>;
type Hosting=“gitlab”|“github”;
//返回一个元素
const setHostingA=(h:Hosting):JSX.Element=>h==“github”?:;
//返回一个组件
const setHostingB=(h:Hosting):React.ComponentType=>h==“github”?GithubLogo:GitlabLogo;
const hostingponent=setHostingB(“github”);
常量元素=
//作为组件调用-返回元素
const HostingLogo=({hosting}:{hosting:hosting}):JSX.Element=>{
const Component=hosting==“github”?GithubLogo:gitablogo;
返回;
}
常数a=;
常数b=;
简而言之,不,这是不可能的

如果希望函数返回JSX元素(即
),则不能要求它是特定类型,因为所有JSX元素都是类型
JSX.element

如果您想让函数返回组件(例如,
GithubLogo
),那么您可以做得更好一点,但不会做得更好。请记住,Typescript是结构化的,而不是名义上的类型。如果
gitallogo
是一个不带道具的函数组件,并返回一个
JSX.Element
,那么任何不带道具的函数组件都可以分配给
typeofgitallogo
。因此,您不能需要特定的组件。您只能需要特定的道具类型

type Hosting = "gitlab" | "github";

// return an element
const setHostingA = (h: Hosting): JSX.Element => h === "github" ? <GithubLogo/> : <GitlabLogo/>;

// return a component
const setHostingB = (h: Hosting): React.ComponentType<{}> => h === "github" ? GithubLogo : GitlabLogo;
const HostingComponent = setHostingB("github");
const element = <HostingComponent/>

// call as a component - return an element
const HostingLogo = ({hosting}: {hosting: Hosting}): JSX.Element => {
    const Component = hosting === "github" ? GithubLogo : GitlabLogo;
    return <Component/>;
}
const a = <HostingLogo hosting="github"/>;
const b = <HostingLogo hosting="gitlab"/>;
type Hosting=“gitlab”|“github”;
//返回一个元素
const setHostingA=(h:Hosting):JSX.Element=>h==“github”?:;
//返回一个组件
const setHostingB=(h:Hosting):React.ComponentType=>h==“github”?GithubLogo:GitlabLogo;
const hostingponent=setHostingB(“github”);
常量元素=
//作为组件调用-返回元素
const HostingLogo=({hosting}:{hosting:hosting}):JSX.Element=>{
const Component=hosting==“github”?GithubLogo:gitablogo;
返回;
}
常数a=;
常数b=;

如果您想要返回这些精确的组件,您应该返回
gitallogo
,而不是
。如果您想要返回后一种形式,并且没有唯一的属性或结果,那么您唯一的选择就是一些通用的东西,比如
React.Component
React.Node
React.FunctionComponent
。我尝试了
const setHosting=(h:Hosting):(GitlabLogo | GithubLogo>)=>
但它不起作用。你有25K的声誉,所以你必须知道在这一点上,“不起作用”不是很有帮助=)。尝试添加一个最小的可复制示例+错误输出。如果要返回这些精确的组件,应返回
gitallogo
,而不是
。如果您想要返回后一种形式,并且没有唯一的属性或结果,那么您唯一的选择就是一些通用的东西,比如
React.Component
React.Node
React.FunctionComponent
。我尝试了
const setHosting=(h:Hosting):(GitlabLogo | GithubLogo>)=>
但它不起作用。你有25K的声誉,所以你必须知道在这一点上,“不起作用”不是很有帮助=)。尝试添加最小的可复制示例+错误输出。