Reactjs 嵌套在其他类型中的Typescript访问对象

Reactjs 嵌套在其他类型中的Typescript访问对象,reactjs,typescript,reinforced-typings,Reactjs,Typescript,Reinforced Typings,我对typescript比较陌生,它有很多细节,我对某种结构有困难。看起来是这样的: 我有一个函数,用于将数据提供给时间轴组件。函数接收的数据可以是类型1或类型2。这就是它变得复杂的地方,类型1是一个对象。但是,类型2可以是4种不同类型中的任意1种 类型1:{} 类型2:类型3 |类型4 |类型5 |类型6 类型3-6在结构上略有不同,不能组合。在isConversion标志下面的函数中,检查(对象:type6)。此对象内部有另一个类型为7的对象 type 6: { ..., t

我对typescript比较陌生,它有很多细节,我对某种结构有困难。看起来是这样的:

我有一个函数,用于将数据提供给时间轴组件。函数接收的数据可以是类型1或类型2。这就是它变得复杂的地方,类型1是一个对象。但是,类型2可以是4种不同类型中的任意1种

类型1:{}

类型2:类型3 |类型4 |类型5 |类型6

类型3-6在结构上略有不同,不能组合。在isConversion标志下面的函数中,检查(对象:type6)。此对象内部有另一个类型为7的对象

type 6: {
   ...,  
   type7: {
       ...,
       conversions
   }
}
type7中有一个名为conversions的字段,其中包含我需要传递到时间线的数据

timelineItems = (items: type1 | type2): PropsData => {
    const { dataType, isConversion } = this.state

    if(isConversion){
      const {comments, type7.conversions } = items as type6
      return {
        comments
        type7.conversions
      }
    }
我有一个工作,当我获取数据并将其设置为状态时,我将获取type7。并使用该值,但我想知道是否有一种方法可以获得上面提到的conversions对象


谢谢。

那么您想知道是否可以确定
项目
类型是否为
类型6

Typescript类型在编译后丢失,因此您必须编写自己的typeguard,如果对象是
Type6
,它将返回
true
。这是纯javascript检查,例如,如果您知道只有
Type6
具有特定字段,则可以检查该字段是否存在于该对象中

接口类型6{
评论:任何[];
6型:7型;
}
接口类型7{
转换:任何[];
}
功能为类型6(obj):obj为类型6{
返回obj.type6!==未定义;
} 
然后您可以像这样使用此typeguard:

if(isType6(项目)){
const{comments,type6:{conversions}}=items;//不需要强制转换,ts知道它是type6
返回{注释,转换};
}

我认为我对这个问题的理解不够,无法大胆回答。如果您完成生成一个可以在独立环境(如)中演示您的问题的示例的练习,这将有所帮助。祝你好运