如何在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非常感谢您,这很有效!请用你的第一句话回答这个问题。