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

如何实现支持校验类私有字段的TypeScript泛型工具类型ValidKeys

实现方案

你可以直接使用以下泛型定义,完全匹配你的需求:

type ValidKeys<A, K extends PropertyKey> = A[K] extends any ? K : never

效果说明

  1. 当传入的K的所有值都是类型A的有效键(包含公开、私有、受保护属性)时,ValidKeys<A, K>的类型与K完全等价,不会产生编译错误
  2. 只要K中存在任意一个不属于A的键,就会直接触发编译报错,避免属性重命名后运行时才发现问题的情况

使用示例

你提到的Mobx场景可以直接替换为以下写法:

constructor() {
  makeObservable<Store, ValidKeys<Store, "x" | "y">>(this, { x: observable, y: false })
}

为什么不用keyof实现?

TS的keyof运算符默认只能获取类的公开属性,无法识别私有、受保护属性,而你需要校验Mobx的私有字段场景,这套基于索引访问的实现刚好可以覆盖私有属性的校验需求,完美适配你的使用场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:03