我对打字稿比较陌生,它来来往往,我在某种结构上遇到麻烦。看起来像这样:
我有一个用于将数据馈送到时间轴组件的函数。该函数接收的数据可以是类型1或类型2。现在这很复杂,类型1是一个对象。但是,类型2可以是4种不同类型中的任何一种
type1:{}
type2:type3 | type4 | type5 | type6
3-6型的彼此在结构上略有不同,因此无法组合。在isConversion标志下面的函数中,检查(object:type6)。该对象内部还有另一个类型7的对象。
type 6: {
...,
type7: {
...,
conversions
}
}
在type7内部是一个称为“转换”的字段,其中包含我需要传递到时间轴的数据。
timelineItems = (items: type1 | type2): PropsData => {
const { dataType, isConversion } = this.state
if(isConversion){
const {comments, type7.conversions } = items as type6
return {
comments
type7.conversions
}
}
我有一个解决方法,当我获取数据并将其设置为状态时,在哪里获取type7。并使用该值,但是我想知道是否有一种获取上述转化对象的方法。
谢谢。
答案 0 :(得分:1)
So you want to know if you can determine if items
type is Type6
?
Typescript types are lost after compilation so you have to write your own typeguard which will return true
if object is Type6
. It's pure javascript check, for example if you know that only Type6
has certain field you can check if it is present in this object.
interface Type6 {
comments: any[];
type6: Type7;
}
interface Type7 {
conversions: any[];
}
function isType6(obj): obj is Type6 {
return obj.type6 !== undefined;
}
Then you can use this typeguard like this:
if(isType6(items)) {
const {comments, type6: {conversions}} = items; // no cast needed, ts know it is Type6
return {comments, conversions };
}