typescript索引签名与记录<;钥匙,类型>;具有uknown属性的对象的返回类型
我有一个typescript索引签名与记录<;钥匙,类型>;具有uknown属性的对象的返回类型,typescript,Typescript,我有一个getQueryParams函数,它接受一个字符串并返回一个具有未知属性的普通对象: 函数getQueryParams(s){ 如果(!s | | typeof s!='string'| | s.length{ 常量a=当前拆分('=')//按拆分`=` 返回{…acc,{[a[0]]:decodeURIComponent(a[1])} }, {}) } //getQueryParams(“?模式=操作&oobCode=代码”) //返回{mode:“action”,oobCode:“c
getQueryParams
函数,它接受一个字符串并返回一个具有未知属性的普通对象:
函数getQueryParams(s){
如果(!s | | typeof s!='string'| | s.length<2){
返回{}
}
返回s
.substr(1)//删除``
.split('&')//按`&`
.减少((会计科目,当前)=>{
常量a=当前拆分('=')//按拆分`=`
返回{…acc,{[a[0]]:decodeURIComponent(a[1])}
}, {})
}
//getQueryParams(“?模式=操作&oobCode=代码”)
//返回{mode:“action”,oobCode:“code”}
//getQueryParams(“”)
//返回{}
键入脚本、提供和:
//记录
类型NameMap2=记录
导出函数getQueryParams(s:string):NameMap2{…}
所以我的问题是,我用哪一个?这只是偏好的问题吗?我可以两者交替使用吗?或者是否有适当的时间使用索引签名或
Record
?索引签名允许您命名密钥,如{[username:string]:UserData}
,而使用Record则是Record
。除此之外,在大多数情况下,两者可以互换使用。对于不需要命名键变量的情况,记录样式更方便。索引签名允许您命名键,如{[username:string]:UserData}
,而使用记录则是Record
。除此之外,在大多数情况下,两者可以互换使用。在不需要命名键变量的情况下,记录样式更方便。语法正确吗?我理解你的意思,但不确定这是否正确应该是{[username:string]:UserData}
,这样的键命名只对文档有用,因为它在类型系统中是不可观察的(例如,类型{[foo:string]:0}
和{[bar:string]:0}
是等效的){username:string:UserData}语法正确吗?我理解你的意思,但不确定这是否正确。它应该是{[username:string]:UserData}
,这样的键命名只对文档有用,因为它在类型系统中是不可见的(例如,类型{[foo:string]:0}
和{[bar:string]:0}
是等效的)类型记录
和{[key:string]:string}
是等效的。但是一般来说,Record
不能用任意K
的索引签名类型表示。有关更多信息,请参阅。还有的答案。如果您还有问题,请告诉我。类型Record
和{[key:string]:string}
是等效的。但一般来说,记录
不能用任意K
的索引签名类型表示。有关更多信息,请参阅。还有的答案。如果您还有问题,请告诉我。
// index signature
type NameMap = {
[key: string]: string
}
export function getQueryParams(s: string): NameMap { ... }
// Record<Keys,Type>
type NameMap2 = Record<string, string>
export function getQueryParams(s: string): NameMap2 { ... }