如何在typescript中键入两个对象之间共享相同键的两个对象?

如何在typescript中键入两个对象之间共享相同键的两个对象?,typescript,Typescript,编辑: 这个问题已被标记为的副本。我看不出其他问题与此相关 两个接口IObjectA和IObjectB共享相同的键foo和bar: //类型 接口IObjectFoo{code:number} 接口IObjectBar{name:string} 输入IFunctionFoo=()=>IObjectFoo 键入IFunctionBar=()=>IObjectBar 接口对象{ foo:IFunctionFoo 酒吧:IFunctionBar } IObjectAKeys类型=IObjectA的

编辑:

这个问题已被标记为的副本。我看不出其他问题与此相关


两个接口
IObjectA
IObjectB
共享相同的键
foo
bar

//类型
接口IObjectFoo{code:number}
接口IObjectBar{name:string}
输入IFunctionFoo=()=>IObjectFoo
键入IFunctionBar=()=>IObjectBar
接口对象{
foo:IFunctionFoo
酒吧:IFunctionBar
} 
IObjectAKeys类型=IObjectA的键
接口IObjectB{
foo?:IObjectFoo
条形图?:IObjectBar
}
//代码
常量对象A={
foo:()=>({code:127}),
酒吧:()=>({name:'Louise Michel'})
}作为对象
常量someFilter=(obj:string)=>['foo']。包括(obj)
const keys=Object.keys(objectA.filter)(someFilter)作为IObjectAKeys[]
const objectB=keys.reduce((acc:ioobjectb,key)=>{
常量FunctionFoorBar=objectA[键]
//错误:类型“{code:number;}{name:string;}”不可分配给类型“(IObjectFoo&IObjectBar)|未定义”。
acc[键]=functionFooOrBar()
返回acc
}, {})
acc[key]=
上有一个错误

我想让TypeScript了解,如果
的值是
foo
,那么
functionfoorbar
的类型是
iffunctionfoo

如何才能做到这一点


这里是

我通过添加类型asertion acc[key]=functionfoooorbar()作为IObjectFoo&IObjectBar来显示错误

您还可以执行const functionFooOrBar=objectA[键为'foo'];acc[key as'foo']=functionFooOrBar(),如果您确定key=='foo'

这样做也有效

const objectB = keys.reduce((acc: IObjectB, key) => {
  let functionFooOrBar;

  if(key === 'foo') {
    functionFooOrBar = objectA[key];

    acc[key] = functionFooOrBar();
  }  

  return acc;
}, {});

通过将类型asertion
acc[key]=functionfoorbar()添加为IObjectFoo&IObjectBar,我得到了要显示的错误
您还可以执行
const functionFooOrBar=objectA[键为'foo']
acc[key as'foo']=functionFooOrBar()
如果您确信
key==='foo'
@uranshishko非常感谢您,这很有效!请用你的第一句话回答这个问题。