我定义了一个具有6个属性的接口。我希望这些属性之一在一个工作流程中是必需的,而在另一工作流程中是可选的。我试图按照以下代码片段的方式定义类型。这类似于散布对象的所有属性,并在散布操作后进行一些更改。
type Entity<T,Keys extends keyof T> = {
[P in keyof T]?: T[P];
[S in Keys]: T[S];
};
但是,这没有完成任务。有办法吗?
我定义了一个具有6个属性的接口。我希望这些属性之一在一个工作流程中是必需的,而在另一工作流程中是可选的。我试图按照以下代码片段的方式定义类型。这类似于散布对象的所有属性,并在散布操作后进行一些更改。
type Entity<T,Keys extends keyof T> = {
[P in keyof T]?: T[P];
[S in Keys]: T[S];
};
但是,这没有完成任务。有办法吗?
我想有几种解决方案。其中之一是:
type Optional<T,OptionalKeys extends keyof T> =
{ [P in OptionalKeys]?: T[P] } & Omit<T,OptionalKeys>;
我们在这里定义OptionalKeys
,并从必填部分中省略它们。