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

如何基于已有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;
};

代码说明:

  1. Omit<Product, 'createdAt' | 'updatedAt'>:从 Product 类型中移除 createdAt 和 updatedAt 两个属性——这两个字段由服务端或数据库自动设置,不需要客户端传入。
  2. & { 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:35:27