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

TypeScript用Pick复用Command属性定义Handler出现TS2322报错如何解决

错误原因

Pick<T, 'type'>是TS内置的工具类型,作用是从对象类型T中筛选出指定属性,返回新的对象类型。你传入Pick<MyCommand, 'type'>得到的类型是{ type: 'MyCommand' },不是type属性对应的值类型'MyCommand',自然无法和字符串值匹配。

解决方案

要取泛型T中type属性的类型,直接用索引访问类型T['type']即可,修改Handler类型定义如下:

export type Handler<T extends Command> = {
  type: T['type']
}

修改后完整无报错的代码如下:

export type Command<
  Type extends string = string,
> = {
  type: Type
}

export type Handler<T extends Command> = {
  type: T['type']
}

export type MyCommand = Command<'MyCommand'>

const MyHandler = (): Handler<MyCommand> => {
  return {
    type: 'MyCommand'
  }
}

如果你非要保留Pick写法,也可以写成Pick<T, 'type'>['type'],但冗余度更高,更推荐直接用索引访问的写法。

内容的提问来源于stack exchange,提问作者Alexander Zeitler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:54:06