TypeScript报错:Type 'keyof T'无法索引'(keyof T)[]'类型(2536)求助
解决TypeScript报错:Type 'keyof T' cannot be used to index type '(keyof T)[]'
这个报错的核心原因是参数名重复导致的作用域覆盖,和分配性完全无关。
看你的fun3函数:外部函数接收的参数是arg: T(符合A类型的对象),但返回的箭头函数里又用了同名参数arg: (keyof T)[]。在箭头函数内部,arg会优先指向这个数组参数,而不是外部的T类型对象。
当你写arg[key]()时,TypeScript认为你是在用keyof T类型的键去索引数组(keyof T)[]——但数组只能用数字类型索引,自然触发类型错误。
修复方法很简单,把返回函数的参数名改成别的,比如keys,让内部能正确引用外部的arg对象:
type A = { [key: string]: () => 123 } function fun3<T extends A>(arg: T) { return (keys: (keyof T)[]) => keys.map((key) => arg[key]()); }
之前的fun和fun2没报错,是因为它们的返回函数里只是接收参数,没有尝试用参数去做索引操作,所以没暴露这个作用域覆盖的问题。
内容的提问来源于stack exchange,提问作者Page not found
相关产品推荐
相关产品推荐

