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

如何定义支持任意属性且值均为boolean的TypeScript泛型interface

错误原因

你之前的写法中,直接将T作为固定属性名声明,没有将泛型参数用到类型逻辑中,所以会触发T 定义但未使用的报错,该写法只能声明一个键名为T、值为boolean的固定结构,无法实现任意属性的需求。


实现方案

方案1:无泛型索引签名(适配你的需求,不限定属性名范围)

如果不需要限制属性名的范围,只要求所有属性值为boolean,直接使用索引签名即可:

export interface BooleansMap {
  // 键名可以是任意字符串/数字/symbol,根据你的需要调整索引类型
  [key: string]: boolean
}

你给出的两个示例对象都可以直接匹配该类型:

// 合法
const map1: BooleansMap = {
  foo: false,
  bar: true,
  baz: false
}
// 合法
const map2: BooleansMap = {
  foo: true
}

方案2:带泛型的索引签名(限定属性名范围)

如果需要将属性名限定为指定的联合类型,可以使用映射类型的泛型写法:

// 泛型 T 约束为合法的对象键类型
export interface BooleansMap<T extends string | number | symbol> {
  [key in T]: boolean
}

使用示例:

// 限定只能有 foo、bar 两个属性
type MyMap = BooleansMap<'foo' | 'bar'>
// 合法
const map: MyMap = {
  foo: true,
  bar: false
}
// 报错:不存在baz属性
const wrongMap: MyMap = {
  foo: true,
  baz: false
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:24:03