TypeScript Pick类型函数报错:{[x:string]:T[U]}无法赋值给Pick<T,U>
TypeScript泛型pick函数类型不匹配问题解决
你遇到的错误是因为TypeScript在处理动态生成的对象属性时,会默认把属性索引推断为string类型,但你声明的返回类型Pick<T, U>的键是明确的U类型(属于keyof T的子集),两者类型不兼容导致的。
下面是两种可行的解决方法:
方法一:直接对返回对象做类型断言
通过类型断言告诉编译器,你返回的对象确实符合Pick<T, U>类型:
const article = { id: 1, title: "TypeScript Explained", active: true, getSlug: () => 'typescript-explained', }; // 注意:TypeScript标准库已内置Pick类型,无需重复定义 function pick<T,U extends keyof T>(obj:T,key:U):Pick<T,U>{ return {[key]: obj[key]} as Pick<T, U>; } pick(article,'title')
方法二:先初始化目标类型对象再赋值
这种写法更直观,先创建一个符合返回类型的空对象,再给它赋值:
const article = { id: 1, title: "TypeScript Explained", active: true, getSlug: () => 'typescript-explained', }; function pick<T,U extends keyof T>(obj:T,key:U):Pick<T,U>{ const result = {} as Pick<T, U>; result[key] = obj[key]; return result; } pick(article,'title')
补充说明:TypeScript标准库已经提供了Pick工具类型,你可以直接使用,不需要自己重新定义。
内容的提问来源于stack exchange,提问作者ram ahuja
相关产品推荐
相关产品推荐

