请教各位在 TS 中怎样对一个联合类型进行类型收窄呢?

2023-05-12 20:25:03 +08:00
 Danswerme

React 组件的 Props 接收一个 config 数组,config 数组里面是 React 组件或者自定义配置;如果是 React 组件则直接渲染,否则按照配置项进行渲染。

目前我是通过typeof来判断Item的类型,请教各位有没有更优雅的方法呢?

代码如下:

interface ItemConfig {
    name: string,
    type: string
}

type Config = ItemConfig | React.FC;

interface XProps {
	config: Config[]
}

const Components = ({ config } : XProps) => {
    return (
        <div>
            {
                config.map(Item => {
                    if (typeof Item === "function") {
                        if (React.isValidElement(Item)) {
                            // 如果是 React 组件
                            return <Item />;
                        }

                        return null;
                    }
                    
                    // 如果是自定义配置
                    
                    ...
                    
                    return ...
                })
            }
        </div>
    );
}

662 次点击
所在节点    问与答
3 条回复
leokun
2023-05-12 22:05:48 +08:00
我感觉你做的和我一样,我感觉没什么毛病,ts 不能在运行时检查,只能通过 js 的 typeof 来推断
XCFOX
2023-05-12 22:16:10 +08:00
Danswerme
2023-05-12 22:52:45 +08:00
@leokun
@XCFOX 谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/939619

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX