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

TypeScript使用Pick提取Todo类型数组元素类型报错如何解决

错误原因

你编写的代码中Pick<Todo, "items">返回的是仅包含items属性的对象类型,结构为{ items: Array<{name:string, value:string}> },并不是直接的数组类型,因此无法通过[0]索引到数组元素类型。

可行解决方案
  • 方案1:直接索引属性+数组元素提取(最简洁)
    直接通过索引访问拿到items的数组类型,再通过[number]提取数组元素类型,这是TS的标准数组元素提取写法:
type TodoItem = Todo["items"][number];

[number]会匹配数组所有数字索引对应的元素,最终直接返回数组的元素类型。

  • 方案2:泛型推断实现(兼容性更强)
    如果不确定items的类型是否一定是数组,可以用类型推断的写法,避免后续第三方模块的Todo类型变动时产生意料之外的报错:
type TodoItem = Todo["items"] extends Array<infer ElementType> ? ElementType : never;

如果items是数组类型,会自动推断出数组元素类型赋值给TodoItem,否则返回never类型。

验证效果

完整可运行无报错的代码示例如下:

type Todo = {
  title: string;
  items:Array<{name:string,value:string}>;
  description: string;
  completed: boolean;
}

// 采用方案1实现
type TodoItem = Todo["items"][number];

const todo: TodoItem = {
  name: "Clean room",
  value: "yes",
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:27:07