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

TypeScript如何创建仅匹配string/number属性的泛型PrimaryKey类型

TypeScript 实现 PrimaryKey<T> 泛型

核心通过映射类型+条件类型+索引访问的组合实现,代码如下:

type PrimaryKey<T> = {
  [K in keyof T]: T[K] extends string | number ? K : never
}[keyof T];

实现逻辑拆解

  • 遍历属性:[K in keyof T] 会遍历传入类型T的所有属性键,生成同结构的映射类型
  • 类型过滤:通过条件类型 T[K] extends string | number ? K : never 逐个校验属性值类型:如果值是string或number,就保留当前属性键,否则返回never标记为无效
  • 提取合法键:最后用[keyof T]做索引访问,自动剔除联合类型中的never成员,最终得到所有符合要求的主键键名联合类型

效果验证

用题目给出的User接口测试:

interface User {
  id: number;
  name: string;
  email: string;
  address: {
    country: string;
    city: string;
    state: string;
    street: string;
  }
  active: boolean;
}

// 推导结果:type UserPrimaryKey = "id" | "name" | "email",完全匹配需求
type UserPrimaryKey = PrimaryKey<User>;

其中address是对象类型、active是布尔类型,都会被自动过滤,不会出现在最终的联合类型里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:18:28