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

如何在TypeScript中合并接口实现DRY原则?避免重复定义

解决TypeScript接口重复定义的DRY方案

1. 合并重复的核心用户接口

你当前的Users和User接口字段完全一致,完全没必要重复定义。直接保留一个核心的User接口,需要用户数组时用User[]即可,无需单独定义Users接口。

重构后的核心接口文件(例如user.types.ts):

export interface User {
    id: number,
    name: string,
    username: string,
    email: string,
    address: Address,
    phone: string,
    website: string,
    company: Company
}

export interface Address {
    street: string,
    suite: string,
    city: string,
    zipcode: string,
    geo: Geo
}

export interface Geo {
    lat: string,
    lng: string
}

export interface Company {
    name: string,
    catchPhrase: string,
    bs: string,
}

2. 复用字段定义UserData和UserResult

UserData和UserResult的字段来自User和Address的部分属性,用TypeScript内置工具类型**Pick和Partial**组合实现,避免重复编写字段:

  • Partial<T>:将T的所有字段转为可选类型
  • Pick<T, K>:从T中挑选指定的K字段集合

重构后的衍生接口:

import { User, Address } from "./user.types";

// 从User和Address中挑选字段,转为可选类型
export type UserData = Partial<Pick<User, 'id' | 'email' | 'phone'> & Pick<Address, 'street' | 'zipcode' | 'city'>>;

// 从User和Address中挑选字段,保持必填类型
export type UserResult = Pick<User, 'id' | 'email' | 'phone'> & Pick<Address, 'street' | 'zipcode' | 'city'>;

3. 额外优化建议

如果UserData用于提交请求的可选参数、UserResult用于响应返回的必填字段,上述写法已完全覆盖需求。后续扩展字段时,只需修改核心的User或Address接口,衍生类型会自动同步,彻底符合DRY原则。

方案优势

  • 消除重复字段定义,降低维护成本:核心字段仅在一处定义,修改时无需多文件同步
  • 利用TS内置工具类型,代码简洁且语义明确
  • 保持类型系统一致性,避免重复定义导致的字段不一致问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:35:18