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

TypeScript泛型问题:基于对象键值类型创建对象时类型推断错误

解决TypeScript泛型中render参数类型错误推断的问题

要解决这个问题,核心是让key的具体值和render参数的类型建立关联,而非让两者独立推断。

问题根源

你之前的ClickableItem泛型定义里,key的类型是keyof T,render的参数类型是T[keyof T]——这两个类型完全独立,TypeScript无法识别key的具体值对应的精确值类型,只能把所有可能的值类型合并成联合类型。

修正方案

给ClickableItem新增一个泛型参数Key,约束它为keyof T,让key和render参数的类型绑定到同一个Key上:

type Example = {
  a: string;
  b: number;
};

// 修正后的泛型类型,通过Key参数关联key与render的参数类型
type ClickableItem<T, Key extends keyof T = keyof T> = {
  key: Key;
  render: (value: T[Key]) => void;
};

使用方式

  1. 手动指定泛型参数:明确传入Key的具体值,让TypeScript精准推断render的参数类型:
const itemA: ClickableItem<Example, 'a'> = {
  key: 'a',
  render: (value) => {
    // value被正确推断为string
    console.log(value.toUpperCase());
  }
};
  1. 自动推断(TS 4.9+):用satisfies关键字让TypeScript根据你传入的key自动推断对应的值类型,无需手动声明泛型参数:
const itemB = {
  key: 'b',
  render: (value) => {
    // value被正确推断为number
    console.log(value.toFixed(2));
  }
} satisfies ClickableItem<Example>;

这样就能确保选择某个key时,render的参数类型是该key对应的精确类型,而非所有值类型的联合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:47:07