我必须创建一个可以来自两种不同类型的组件。
一个月一个月一个月一个月一个月
据我所知,我可以将组件类型定义为function Component<T extends A | B>(props T){ ... Stuff }
我可以称之为
const MyComponent : A = <Component a={"test"}/>
const MyComponent : B = <Component b={1231241}/>
我的问题是:当编码Component
时,我如何导航 prop ,我需要做:
function Component<T extends A | B>(props T){
let data;
if(props typeof A){
data = props.a
}
if(props typeof A){
data = props.b
}
console.log(data)
}
我不能使用typeof
,因为它是用于原语的,但是instanceOf似乎只用于类。有什么线索吗?我做错了什么?
2条答案
按热度按时间vh0rcniy1#
没有真实的干净的解决方案,因为类型在生成的JavaScript中不存在。我建议您在两种类型中添加一个共享字段,如
type
,这有助于TypeScript确定哪些属性可用:这种方法的优点是可以很好地扩展更多、更复杂的类型。
编辑:通常,类型检查可以通过用户定义的类型保护来完成:
但是在大多数情况下我还是坚持使用第一种变体,它不太容易出错(类型保护方法可能出错),并且提供了前面提到的优点。
ffx8fchx2#
你可以试试这样的方法:
TypeScript会根据
if
语句中的检查自动检测 prop 类型。