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

如何将TypeScript泛型类型的键约束为仅字符串类型?

实现仅允许字符串键的泛型类型OnlyStringKey<T>

要满足仅接受所有键为字符串类型的对象,可通过泛型约束结合条件类型实现,具体代码如下:

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

原理说明

泛型约束部分会遍历传入类型T的所有键K:

  • 若K是字符串类型,保留原属性的类型T[K];
  • 若K是数字或Symbol类型,将对应属性的类型强制设为never。

当T包含非字符串键时,原类型的对应属性类型(比如string)无法兼容never类型,因此T不满足泛型约束,直接触发编译错误。只有当所有键都是字符串类型时,约束中的类型与T完全匹配,泛型才会正常通过。

验证示例

// ✅ 编译通过,所有键均为字符串
let x: OnlyStringKey<{whatEverJustString1: 1, whatEverJustString2: '' }>;

// ❌ 编译报错,数字键2不满足约束
let y: OnlyStringKey<{whatEverJustString1: 1, 2: '' }>;

// ❌ 编译报错,Symbol键不满足约束
let z: OnlyStringKey<{whatEverJustString1: 1, [Symbol.search]: '' }>;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:15:42