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

如何在TypeScript中声明仅含单个键值对的类型?

解决TypeScript中单键值对对象的类型声明问题

要实现仅允许单个键值对的对象类型,你可以通过映射类型+联合类型的方式来定义,具体方案如下:

定义单键值对对象类型

先声明一个SingleKeyValuePair类型,它会生成所有仅含单个字符串键、值为string的对象类型的联合:

type SingleKeyValuePair = {
  [K in string]: { [key in K]: string }
}[string];

应用到Props的数组中

然后把你的searchArray类型指定为string和这个单键对象类型的数组:

interface Props {
  // 其他属性...
  searchArray: (string | SingleKeyValuePair)[];
}

验证效果

这样定义后,符合要求的数组会正常通过类型检查:

const validSearchArray: Props['searchArray'] = [
  'name', 
  {stats: 'resolution'},
  'uptime',
  {config: 'interface'},
];

而包含多个键值对的对象会直接触发类型错误:

// 下面这行代码会报错,因为对象有两个键,不符合SingleKeyValuePair类型
const invalidSearchArray: Props['searchArray'] = [
  {stats: 'resolution', config: 'interface'}
];

原理说明

这个类型的核心逻辑是:

  1. 通过[K in string]遍历所有可能的字符串键名K
  2. 为每个K生成仅包含该键的对象类型{ [key in K]: string }
  3. 最后用[string]索引整个映射类型,得到所有单键对象类型的联合类型
  4. 多键对象无法匹配联合类型中的任何成员,因此会被TypeScript拦截

可选:限制键的可选范围

如果你希望对象的键只能是特定的几个值(比如只能是stats或config),可以把string换成具体的联合类型:

type AllowedKeys = 'stats' | 'config';
type SingleKeyValuePair = {
  [K in AllowedKeys]: { [key in K]: string }
}[AllowedKeys];

这样就能进一步约束键的可选值,让类型检查更严格。

内容的提问来源于stack exchange,提问作者the constant gardener

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:46:18