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

如何在TypeScript泛型接口中避免重复使用T["uuid"]类型?

解决TypeScript接口中重复使用T["uuid"]的问题

当然可以,有两种简洁的方式来避免重复书写T["uuid"]:

方法一:通过额外泛型参数复用UUID类型

给接口添加一个默认值为T["uuid"]的泛型参数U,后续直接用U替代T["uuid"]即可,用户使用时无需手动传入U,TypeScript会自动推导:

export interface Foo<T extends { uuid: U; name: string }, U = T["uuid"]> {
  getAll(): Promise<T[]>;
  getAllIn(ids: U[]): Promise<T[]>;
  findOne(id: U): Promise<T | null>;
  findOneByName(name: string): Promise<T | null>;
  getOne(id: U): Promise<T>;
  addOne(item: T): Promise<void>;
  deleteOne(id: U): Promise<void>;
  updateOne(item: T): Promise<void>;
}

方法二:定义工具类型提取UUID

单独创建一个工具类型UuidOf<T>来提取T的uuid属性类型,之后在接口中直接引用这个类型别名:

type UuidOf<T> = T["uuid"];

export interface Foo<T extends { uuid: unknown; name: string }> {
  getAll(): Promise<T[]>;
  getAllIn(ids: UuidOf<T>[]): Promise<T[]>;
  findOne(id: UuidOf<T>): Promise<T | null>;
  findOneByName(name: string): Promise<T | null>;
  getOne(id: UuidOf<T>): Promise<T>;
  addOne(item: T): Promise<void>;
  deleteOne(id: UuidOf<T>): Promise<void>;
  updateOne(item: T): Promise<void>;
}

两种方式都能达到目的:第一种写法更简洁,第二种语义更清晰,可根据团队编码习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:22:35