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
相关产品推荐
相关产品推荐

