TypeScript:通过使用约束限制某些属性来限制现有接口

TypeScript:通过使用约束限制某些属性来限制现有接口,typescript,Typescript,我有以下TypeScript接口,用作ORM库的数据库实体: export interface Entity { id?: number; someColumn: string; someOtherValue: number; otherColumn: string; } 请注意可选的id属性,它是实体的主键或未定义。 如果未定义,则表示基础数据库中不存在该实体 但是,许多函数只接受具有有效id的实体对象。 因此,我想介绍一个新的界面,它看起来像这样,没有?: export i

我有以下TypeScript接口,用作ORM库的数据库实体:

export interface Entity {
  id?: number;
  someColumn: string;
  someOtherValue: number;
  otherColumn: string;
}
请注意可选的id属性,它是实体的主键或未定义。 如果未定义,则表示基础数据库中不存在该实体

但是,许多函数只接受具有有效id的实体对象。 因此,我想介绍一个新的界面,它看起来像这样,没有?:

export interface ValidEntity {
  id: number;
  someColumn: string;
  someOtherValue: number;
  otherColumn: string;
}
现在我的问题是我不想复制原始实体接口的所有属性。 如何使用约束扩展实体接口,以强制id不能未定义

颠倒问题 另一个问题与此相反。
假设我们已经有了ValidEntity接口,并希望创建一个实体接口,该接口放松id属性以允许未定义。我们如何在不复制属性的情况下实现这种放松?

尽管可能有其他方法产生更漂亮的错误消息, 快速交叉口类型将完成此任务

导出接口实体{ id?:编号; someColumn:字符串; someOtherValue:数字; 其他列:字符串; } 类型ValidEntity=Entity&{id:number}; //替代解决方案: //类型RequiredBy=省略&必需 //类型有效性=要求者 函数fe:ValidEntity{} 设obj={ 专栏:1, 其他值:2, 其他栏目:3 } fobj; //类型{someColumn:string;someOtherValue: //number;otherColumn:string;}但在类型{id:number;}中是必需的。 往相反的方向走有点棘手。基于,可以按如下方式使用实用程序类型:

类型PartialBy=省略&部分 接口有效性{ id:编号; someColumn:字符串; someOtherValue:数字; 其他列:字符串; } 类型实体=PartialBy
很好用,你能不能给我一个相反方向的提示?我更新了原来的问题一个联合类型可能会做相反的方向,但这不是完全必要的事情。编辑添加答案。