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

TypeScript泛型问题:如何正确访问泛型接口的value字段

TypeScript泛型中如何在ActionAdd接口中访问T["value"]字段?

核心问题是你没有给泛型T添加约束,导致TypeScript无法确定T一定包含value属性。既然已知传入的T始终带有value键,最直接的解决方式是给T添加类型约束:

type UserValue = { username: string; };

interface User {
  id: number;
  value: UserValue;
}

// 约束T必须包含value属性,属性值类型可以是任意值
interface ActionAdd<T extends { value: unknown }> {
  type: "ADD";
  value: T["value"];
}

type UserAction = ActionAdd<User>;
// 此时UserAction的类型为:{ type: "ADD"; value: UserValue; }

分析你尝试的两种写法:

  • 写法一:需要额外传入键名泛型K,虽然能实现需求,但完全没必要——因为我们明确要访问的是value键,额外的泛型参数只会增加代码冗余,降低可读性。
  • 写法二:条件类型推断能得到正确结果,但写法过于绕弯。既然已经确定T一定有value属性,直接通过泛型约束声明这个前提,比条件判断更直观简洁。

这种约束方式既符合你的前提条件,又能让代码逻辑清晰,是最优的实现方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:15:11