如果我有一个具有所有必需属性的类型,我如何定义具有相同属性的另一个类型,其中仍然需要某些属性,但其余类型是可选的?
例如,我想要一个派生自SomeType的新类型,其中prop1和prop2是必需的,但其余的是可选的:
interface SomeType {
prop1;
prop2;
prop3;
...
propn;
}
interface NewType {
prop1;
prop2;
prop3?;
...
propn?;
}
Run Code Online (Sandbox Code Playgroud)
Tit*_*mir 13
您可以使用组合的Partial和Pick做的所有属性的部分,然后只挑一些人要求:
interface SomeType {
prop1: string;
prop2: string;
prop3: string;
propn: string;
}
type OptionalExceptFor<T, TRequired extends keyof T> = Partial<T> & Pick<T, TRequired>
type NewType = OptionalExceptFor<SomeType, 'prop1' | 'prop2'>
let o : NewType = {
prop1: "",
prop2: ""
}
Run Code Online (Sandbox Code Playgroud)
对于 tetter 性能,除了Titian的答案之外,您还必须执行以下操作:
type OptionalExceptFor<T, TRequired extends keyof T = keyof T> = Partial<
Pick<T, Exclude<keyof T, TRequired>>
> &
Required<Pick<T, TRequired>>;
Run Code Online (Sandbox Code Playgroud)
type onlyOneRequired = Partial<Tag> & {id: string}
Run Code Online (Sandbox Code Playgroud)
在上述类型中,Tag 的所有属性都是可选的,而不是id必需的。因此,您可以使用此方法并指定所需的属性。
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |