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

TypeScript中如何让GenericField泛型参数从value自动推断?

解决方案

需求完全可以实现,无需手动指定每个GenericField的泛型参数,核心思路是借助泛型工具函数触发TypeScript的自动类型推断。


单实例声明

先定义一个通用的工具函数:

type GenericField<T> = {
  value: T;
  onChange(value: T): void;
}

function defineGenericField<T>(field: GenericField<T>) {
  return field;
}

使用时直接调用该函数即可,value的类型会被自动捕获,onChange的参数类型也会同步推断:

const field = defineGenericField({
  value: new Date(),
  onChange: (value) => {
    // value 自动推断为Date类型,可直接调用Date的相关方法
    console.log(value.getFullYear());
  }
});

数组批量声明

如果需要批量定义多个GenericField组成的数组,可以再写一个批量工具函数:

function defineGenericFields<T extends any[]>(fields: [...{ [K in keyof T]: GenericField<T[K]> }]) {
  return fields;
}

使用时无需添加任何额外类型注解,数组中每一项的类型都会自动推断,同时全程保障类型安全:

const fields = defineGenericFields([
  {
    value: new Date(),
    onChange: (value) => {
      // value 自动推断为Date类型
    }
  },
  {
    value: '字符串示例',
    onChange: (value) => {
      // value 自动推断为string类型
    }
  },
  {
    value: 100,
    onChange: (value) => {
      // value 自动推断为number类型
    }
  }
]);

// 类型安全验证:如果不符合类型规则会直接触发TS报错
// 例:fields[0].onChange('123') 会报错,因为要求传入Date类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:06:08