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

如何在TypeScript中为泛型类型属性的函数参数标注类型?

解决TypeScript中约束对象布尔属性的函数参数问题

你可以通过引入第二个泛型参数并添加类型约束,实现无需类型断言的类型安全赋值:

方法一:双泛型参数自动推导

这种写法让TypeScript在调用时自动检查属性类型,函数内部无需额外断言:

function doThing<T, K extends keyof T>(object: T, propertyOfT: K) {
  object[propertyOfT] = true;
}

// 调用示例
const testObj = { isActive: true, username: "jack" };
doThing(testObj, "isActive"); // ✅ 合法,属性值为boolean
doThing(testObj, "username"); // ❌ 编译报错:true无法赋值给string类型

方法二:显式约束属性类型(TypeScript 4.9+)

使用where子句,在函数定义阶段就明确约束目标属性的类型为boolean,逻辑更清晰:

function doThing<T, K extends keyof T>(object: T, propertyOfT: K): void
where T[K] extends boolean {
  object[propertyOfT] = true;
}

方法三:基于映射类型的优化(避免断言)

如果你坚持使用自定义的布尔属性键类型,可以通过类型缩小规避断言:

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

function doThing<T>(object: T, propertyOfT: BooleanKey<T>) {
  // 通过类型缩小明确属性类型
  const propValue: boolean = object[propertyOfT];
  object[propertyOfT] = true;
}

内容的提问来源于stack exchange,提问作者Cesar Martinez Dominguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:13:09