如何基于已有TypeScript类型定义新类型:可选、移除指定属性
TypeScript 定义 CreateUpdateProductDTO 的实现方案
你可以通过 TypeScript 的类型工具组合快速实现需求,核心思路是移除服务端生成的时间戳属性,同时将 id 设为可选,具体代码如下:
type Product = { id: string; name: string; shortDescription: string | null; imageUrl: string | null; createdAt: Date; updatedAt: Date; productCategoryId: string; } // 定义目标 DTO 类型 type CreateUpdateProductDTO = Omit<Product, 'createdAt' | 'updatedAt'> & { id?: string; };
代码说明:
Omit<Product, 'createdAt' | 'updatedAt'>:从Product类型中移除createdAt和updatedAt两个属性——这两个字段由服务端或数据库自动设置,不需要客户端传入。& { id?: string; }:通过交叉类型,把原本必填的id属性改为可选类型,让该 DTO 既能用于创建新商品(无需传 id),也能用于更新现有商品(需要指定修改对象时传入 id)。
最终生成的 CreateUpdateProductDTO 结构如下:
{ id?: string; name: string; shortDescription: string | null; imageUrl: string | null; productCategoryId: string; }
这种写法的优势是完全复用原 Product 类型的定义,后续 Product 类型有变动时,DTO 会自动同步更新,无需手动维护重复代码。
内容的提问来源于stack exchange,提问作者Paul-Sebastian Manole
相关产品推荐
相关产品推荐

