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

如何通过对象类型与属性键获取对应属性值类型?修复函数类型错误

如何根据对象类型和属性键获取对应值的类型?

你的问题核心在于没有让属性键和对应值的类型建立关联,导致TypeScript无法追踪到当前传入的key对应的具体值类型,而是把value的类型推断成了所有属性值的联合类型。

问题出在哪?

你原来的函数定义:

function toPartial<T>(key: keyof T, value: T[typeof key]): Partial<T> {
  const partial: Partial<T> = {};
  partial[key] = value;
  return partial;
}

这里的typeof key其实是keyof T,所以T[typeof key]等价于T[keyof T]——也就是ExampleType里string | number的联合类型。所以当你传入key="amount"和value="abc"时,因为"abc"属于string(联合类型的一部分),TypeScript不会报错,但这显然不符合你的预期。

正确的解决方案

我们需要把属性键也作为一个泛型参数,让TypeScript明确追踪当前使用的具体键,从而绑定value的类型到该键对应的值类型:

function toPartial<T, K extends keyof T>(key: K, value: T[K]): Partial<T> {
  const partial: Partial<T> = {};
  partial[key] = value;
  return partial;
}

验证示例

用你的ExampleType测试:

type ExampleType = {
  id: string,
  amount: number
}

const key = "amount";
const value = "abc";

// 现在这里会触发类型错误:类型"string"不能赋值给类型"number"
toPartial<ExampleType>(key, value);

// 正确的用法:传入number类型的value
toPartial<ExampleType>("amount", 100); // 正常通过

这样修改后,TypeScript会根据你传入的具体key,自动约束value必须是该键对应的类型,完美解决了你的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:20:19