Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
typescript索引签名与记录<;钥匙,类型>;具有uknown属性的对象的返回类型_Typescript - Fatal编程技术网

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 { ... }