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

Angular/TypeScript:接口中定义泛型返回函数,初始化时如何指定类型?

解决TableDefinition数组元素指定不同返回类型的问题

问题原因

你定义的TableDefinition<T>接口中,value是一个泛型函数<K>(order: T) => K,这意味着该函数需要支持返回任意类型K,但你实际传入的函数只能返回固定类型(比如string),TypeScript因此报错——它无法保证泛型K和实际返回类型一致。

解决方案

把返回类型K提升为接口的泛型参数,让每个TableDefinition实例对应一个固定的返回类型,这样数组里的每个元素就能拥有独立的返回类型。

1. 修改接口定义

export interface TableDefinition<T, K> {
  field: string;
  value: (order: T) => K;
}

2. 初始化数组的两种方式

方式一:显式指定联合类型数组

如果知道所有可能的返回类型,直接声明数组的联合类型:

// 假设Person有string类型的Id和number类型的Age
this.cols: (TableDefinition<Person, string> | TableDefinition<Person, number>)[] = [
  { field: 'id', value: (obj: Person) => obj.Id },
  { field: 'age', value: (obj: Person) => obj.Age }
];

方式二:用辅助函数自动推断类型

如果不想手动声明联合类型,写一个辅助函数帮TypeScript自动推断每个元素的类型:

function createTableCol<T, K>(field: string, value: (obj: T) => K): TableDefinition<T, K> {
  return { field, value };
}

this.cols = [
  createTableCol('id', (obj: Person) => obj.Id),
  createTableCol('age', (obj: Person) => obj.Age)
];

这样TypeScript会自动推断出cols的类型是(TableDefinition<Person, string> | TableDefinition<Person, number>)[],完全符合每个元素返回不同类型的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:10:28