TypeScript泛型T设keyof foo默认值仍提示无法索引foo类型如何解决
报错原因
泛型参数的默认值不等于类型约束,你当前只给T设置了默认值为keyof foo,但没有限制T的取值范围,TS无法保证所有情况下T都是foo的合法索引,因此抛出报错。
修复方案
给泛型T加上extends keyof foo的类型约束即可,修改后的代码如下:
type foo = { asd:"" } // 新增 extends 约束限制T的取值范围 interface FOOS<T extends keyof foo = keyof foo> extends foo { copy(key: T): foo[T] }
说明
extends keyof foo会强制所有传入的T都必须是foo的合法键类型,不管是显式传入的泛型参数还是默认值,都满足索引foo的要求,报错自然就消除了。
内容的提问来源于stack exchange,提问作者minjae kim
相关产品推荐
相关产品推荐

