Javascript 在Typescript中实例化映射的索引访问类型?

Javascript 在Typescript中实例化映射的索引访问类型?,javascript,typescript,strong-typing,Javascript,Typescript,Strong Typing,对于数据规范化脚本,我很难对Typescript中的以下行为进行推理。假设我有一个关系类型,形状如下: 导出接口关系{ 成员:Map; 用户:地图; 书籍:地图; } 因此,Partial类型使该接口的属性成为可选的 我希望能够为每个关系属性任意创建正确类型的新映射,然后能够向映射添加正确类型的值(即MemberEntity,UserEntity,或BookEntity) 以下是我目前掌握的情况: private addRelation(relationList:Partial,relatio

对于数据规范化脚本,我很难对Typescript中的以下行为进行推理。假设我有一个
关系
类型,形状如下:

导出接口关系{
成员:Map;
用户:地图;
书籍:地图;
}
因此,
Partial
类型使该接口的属性成为可选的

我希望能够为每个关系属性任意创建正确类型的新映射,然后能够向映射添加正确类型的值(即
MemberEntity
UserEntity
,或
BookEntity

以下是我目前掌握的情况:

private addRelation(relationList:Partial,relationKey:K,dataToAdd):void{
relationList[relationKey]=新映射();
}
但是,typescript编译器对此表示不满:

TS2322: Type 'Map<string, Relations[K]>' is not assignable to type 'Partial<Relations>[K]'.
Type 'Map<string, Relations[K]>' is not assignable to type 'Map<string, MemberEntity> & Map<string, UserEntity> & Map<string, BookEntity>.
TS2322:类型“Map”不可分配给类型“Partial[K]”。
类型“Map”不可分配给类型“Map&Map&Map”。

我怎样才能解决这个问题?看起来我需要在某个时候缩小类型范围(给定
&
),但我很好奇如何至少告诉编译器
映射的值的类型,给定我首先为
addRelation
函数提供的类型参数和约束。

这可能是可以在函数体内部强制转换的情况之一。有时候,TypeScript并没有我们所希望的表达能力。在这种情况下,这可能是不可能的,在函数内部使用
作为记录[K]
进行强制转换是合理的。如果使用您的最终参数
dataToAdd
,键入
:Relations[K]
,则它工作得非常好。这可能是可以在函数体内部强制转换的情况之一。有时候,TypeScript并没有我们所希望的表达能力。在这种情况下,这可能是不可能的,并且在函数内部使用
作为记录[K]
是合理的。如果使用您的最终参数
dataToAdd
,键入
:Relations[K]
,则效果非常好。