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

如何在TypeScript中根据operation类型条件约束对象的id字段类型?

根据operation动态约束id字段类型

你要的这种根据operation取值来条件式定义id类型的需求完全可以实现,下面是两种常用的解决方案:

方案一:联合类型枚举(直观易懂)

直接把每种operation对应的对象类型枚举出来,TypeScript会自动关联operation和id的约束关系:

type Operation = 'create' | 'update' | 'delete';

type MutationKey = 
  | { operation: 'create'; id?: undefined } // create时id可选且只能是undefined
  | { operation: 'update' | 'delete'; id: string }; // update/delete时id必须是string

// 验证示例
const ex1: MutationKey = { operation: "create" }; // ✅ 正确
const ex2: MutationKey = { operation: "update", id: "1" }; // ✅ 正确
const ex3: MutationKey = { operation: "create", id: "2" }; // ❌ 报错(create不允许传string类型的id)
const ex4: MutationKey = { operation: "delete" }; // ❌ 报错(delete必须传id)

方案二:泛型+条件类型(灵活可扩展)

如果后续需要扩展Operation的取值,用泛型结合条件类型的方式更便于维护:

type Operation = 'create' | 'update' | 'delete';

// 泛型T约束为Operation类型,根据T的取值动态决定id类型
type MutationKey<T extends Operation> = {
  operation: T;
  id: T extends 'create' ? undefined : string;
};

// 验证示例
const ex1: MutationKey<'create'> = { operation: "create" }; // ✅ 正确
const ex2: MutationKey<'update'> = { operation: "update", id: "1" }; // ✅ 正确
const ex3: MutationKey<'create'> = { operation: "create", id: "2" }; // ❌ 报错
const ex4: MutationKey<'delete'> = { operation: "delete" }; // ❌ 报错

两种方案都能实现你的需求:当operation为create时id必须是undefined(甚至可以完全不写),当operation为update或delete时id必须是string类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:45:11