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

TypeScript如何提取对象类型中值为字符串类型的键?

TypeScript 收窄对象键为指定值类型的实现方案

通用工具类型定义

可以通过 TypeScript 的映射类型与条件类型组合实现需求,通用工具类型写法如下:

type KeysOfType<T, TargetType> = {
  [K in keyof T]: T[K] extends TargetType ? K : never
}[keyof T]

示例使用

针对你给出的Person接口,使用方式如下:

// 先补全示例中缺失的 Address 定义
interface Address {
  street: string
  city: string
}

interface Person {
  id: number;
  name: string;
  address: Address;
}

// 仅保留值为字符串类型的键
type onlyKeysWithStringValues = KeysOfType<Person, string>
// 最终类型等价于:type onlyKeysWithStringValues = "name"

效果验证

// 合法赋值
const validKey: onlyKeysWithStringValues = "name"

// 非法赋值,会触发类型报错
const invalidKey1: onlyKeysWithStringValues = "id"
const invalidKey2: onlyKeysWithStringValues = "address"

原理解释

  • 首先遍历目标类型T的所有键,对每个键对应的值类型做匹配判断:如果值类型是目标类型TargetType的子类型,就保留当前键名,否则返回never
  • 最后取所有返回结果的联合类型,never类型会在联合运算中被自动过滤,最终剩下的就是值类型符合要求的键的集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:06:01