У меня есть объект, для которого нужно сгруппировать определенные опции. Так что либо ничего не пропущено, либо оба пропущены. Обычно я добавляю это к вложенному свойству, но не могу изменить форму этого объекта.
В приведенном ниже примере есть обязательное «a», необязательное «b», но тогда «c» и «d» должны быть либо оба, либо ни того, ни другого.
type Basic = {
a: string,
b? string, // independant
c?: boolean, // if c is given, d must also be given
d?: (e: boolean) => void, // if d is given, c must also be given
}
Я пытался сделать какой-то необычный Typescript, но, похоже, я еще недостаточно хорош, чтобы разбираться в продвинутых вещах.
type GroupedOptional<T> = {
[K in keyof T]: undefined;
} & Required<T>
type Fancy = {
a: string,
b?: string,
} & GroupedOptional<{
c: boolean,
d: (e: boolean) => void,
}>;