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

如何通过泛型参数传递基本类型作为对象动态属性键?

实现包含固定属性与泛型动态键的对象类型

你原来的写法存在TypeScript语法限制,无法直接通过interface实现这种动态指定单个属性名的需求,下面是正确的实现方案:

核心思路

通过类型别名+交叉类型,将固定的分页属性部分与泛型指定的动态属性部分合并,同时给泛型键名添加类型约束,确保它符合对象键的合法类型。

正确实现代码

// 定义泛型类型,Key约束为字符串类型,Content是动态属性的元素类型
type Pagination<Key extends string, Content> = {
  // 固定的分页属性
  pagination: {
    total: number;
    page: number;
  };
} & {
  // 泛型指定的动态属性,键名由Key参数决定,值为Content数组
  [K in Key]: Content[];
};

使用示例

// 先定义业务数据类型(比如商品)
type Product = {
  id: number;
  name: string;
};

// 生成包含products动态属性的分页类型
type ProductData = Pagination<'products', Product>;

// 符合类型约束的对象实例
const productResponse: ProductData = {
  pagination: {
    total: 50,
    page: 2
  },
  products: [
    { id: 10, name: "无线耳机" },
    { id: 11, name: "智能手表" }
  ]
};

为什么原写法不生效?

TypeScript的interface不支持直接将模板字符串(如${key})作为单个属性名定义,这种场景需要用映射类型([K in Key])来将泛型参数转化为具体的对象属性键,再通过交叉类型与固定属性部分合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:33:51