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 为什么可以';索引签名参数类型扩展字符串或数字?_Typescript_Typescript Generics - Fatal编程技术网

Typescript 为什么可以';索引签名参数类型扩展字符串或数字?

Typescript 为什么可以';索引签名参数类型扩展字符串或数字?,typescript,typescript-generics,Typescript,Typescript Generics,我编写了这个简单的函数: 函数属性映射(prop:T) { 返回函数(记录:U):V { 返回记录[道具]; }; }; 编译器给了我以下错误: error TS1023: An index signature parameter type must be 'string' or 'number'. 3 return function<U extends {[key:T]:V},V>(record:U):V ~~~

我编写了这个简单的函数:

函数属性映射(prop:T)
{
返回函数(记录:U):V
{
返回记录[道具];
};
};
编译器给了我以下错误:

error TS1023: An index signature parameter type must be 'string' or 'number'.

3  return function<U extends {[key:T]:V},V>(record:U):V
                                ~~~
error TS2536: Type 'T' cannot be used to index type 'U'.

5   return record[prop];
               ~~~~~~~~~~~~
错误TS1023:索引签名参数类型必须为“string”或“number”。
3返回功能(记录:U):V
~~~
错误TS2536:类型“T”不能用于索引类型“U”。
5返回记录[prop];
~~~~~~~~~~~~

为什么这是一个限制?

您可以实现您希望使用的结果

函数属性映射(prop:T){
返回函数(记录:U):V{
返回记录[道具]
}
}

这很有效;我还删除了类型
V
,并将嵌套函数的返回类型替换为
U[T]
,因为我在返回值标记为
未知时遇到了问题。
function propertyMap<T extends string>(prop: T) {
  return function <U extends { [key in T]: V }, V>(record: U): V {
    return record[prop]
  }
}