Typescript 如何按索引访问映射类型
我试图对以下行为进行思考,假设我有以下类型定义Typescript 如何按索引访问映射类型,typescript,Typescript,我试图对以下行为进行思考,假设我有以下类型定义 类型RMap={ a:{foo:string} b:{foo:unknown} } 类型RType=RMap的键 类型RState={ [k:字符串]:{ s:RMap[RType] } } 鉴于这些,下面的f1和f2之间有什么区别?为什么第一个不编译 声明常量映射:RState 函数f1(k:string,f:(r:RMap[r])=>void:void{ f(映射[k].s) } 函数f2(k:string,f:(r:RMap[RType])
类型RMap={
a:{foo:string}
b:{foo:unknown}
}
类型RType=RMap的键
类型RState={
[k:字符串]:{
s:RMap[RType]
}
}
鉴于这些,下面的f1
和f2
之间有什么区别?为什么第一个不编译
声明常量映射:RState
函数f1(k:string,f:(r:RMap[r])=>void:void{
f(映射[k].s)
}
函数f2(k:string,f:(r:RMap[RType])=>void:void{
f(映射[k].s)
}
它不起作用,因为R扩展RType
比RType
宽
RType
是'a'|'b'
,没有其他选项
R扩展RType
适合'a'|'b'|'c'
,这会破坏R:RMap[意外的\u键]
它不起作用,因为R扩展RType
比RType
更宽
RType
是'a'|'b'
,没有其他选项
R扩展RType
fits'a'|'b'|'c'
,这会打断R:RMap[意外的\u键]