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]
}
}