You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:06:26