如何在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
相关产品推荐
相关产品推荐

