如何创造,;是否使用基于typescript中泛型参数的条件类型?

如何创造,;是否使用基于typescript中泛型参数的条件类型?,typescript,typescript-generics,Typescript,Typescript Generics,我试图编写一个泛型typescript函数来创建并返回一个变量,该变量的类型取决于其arg的类型。依赖关系很简单:如果comp的类型是Comp1,那么repr的类型应该是Repr1,Comp2/Repr2也是如此。这里似乎应该使用条件类型,但我不能让它编译。请注意,此代码段是typescript,因此无法在so中运行。将其粘贴到typescript中以查看错误 type Comp1={type:“Comp1”,id:string,desc:string} 类型Comp2={type:“Comp2

我试图编写一个泛型typescript函数来创建并返回一个变量,该变量的类型取决于其arg的类型。依赖关系很简单:如果comp的类型是Comp1,那么repr的类型应该是Repr1,Comp2/Repr2也是如此。这里似乎应该使用条件类型,但我不能让它编译。请注意,此代码段是typescript,因此无法在so中运行。将其粘贴到typescript中以查看错误

type Comp1={type:“Comp1”,id:string,desc:string}
类型Comp2={type:“Comp2”,id:string,name:string}
类型CompType=Comp1 | Comp2
函数isComp1(c:CompType):c是Comp1{返回c.type=='Comp1'}
函数isComp2(c:CompType):c是Comp2{返回c.type=='Comp2'}
类型Repr1={comp:Comp1,id:string,desc?:string}
类型Repr2={comp:Comp2,id:string,name?:string}
类型ReprType=T扩展Comp1?Repr1:Repr2
函数foo(comp:T){
const repr:ReprType={id:comp.id,comp}//错误:不可分配
//…使用repr和comp执行其他操作,而无需键入guard
//然后,为了在这个操场上进行测试,测试两个组合:
if(isComp2(comp)){
repr.name=comp.name//ERROR属性名称在ReprType上不存在
}否则如果(isComp1(comp)){
repr.desc=comp.desc//ReprType上不存在错误属性desc
}
返回报告
}
常量comp1:comp1={type:“comp1”,id:“comp1”,desc:“comp1 desc”}
傅(comp1)
常量comp2:comp2={type:“comp2”,id:“comp2”,name:“comp2 name”}
傅(comp2)