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

TypeScript中如何让Model接口自动推断get方法的参数类型?

TypeScript泛型自动推断问题解决

问题代码与报错

定义了如下泛型接口:

interface Model<T extends Type> {
  type: T
  get?: (value: ToNodeType<T>) => any
}

想要通过type属性自动推断get方法的参数类型,编写了以下代码:

const model: Model = {
  type: 'int',
  get: (v) => 0
}

运行时报错:泛型类型“Model”需要1个类型参数。

解决方案

直接使用Model而不指定泛型参数会触发报错,要实现自动推断,最佳方式是通过泛型工厂函数让TypeScript推导泛型类型:

// 定义泛型工厂函数
function createModel<T extends Type>(model: Model<T>) {
  return model;
}

// 使用时自动推断类型
const model = createModel({
  type: 'int',
  get: (v) => 0 // v的类型会自动推断为ToNodeType<'int'>
});

原理说明

TypeScript无法直接从对象字面量的属性值推断泛型接口的类型参数,必须借助泛型函数的参数推导机制。通过工厂函数传入对象字面量,TypeScript会根据type属性的值自动推导泛型T的类型,进而确定get方法的参数类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:40:30