одно поле может быть обязательным или не обязательным в зависимости от значения другого поля данного интерфейса?
Понятно, что нужно использовать conditional types и выражение для вычисления подходящего типа в духе T extends true ? A : B, но не понятно как в одно поле передать значение другого.
Вот конкретному примеру такого интерфейса был бы рад.
Если говорить о конкретике, то вот:
type OnChangeDate<T extends boolean> = T extends true ? (date: Date, event: React.SyntheticEvent) => void : never;
export interface Props {
hasPeriod?: boolean;
startDate: Date;
endDate?: Date;
onChangeStartDate: (date: Date, event: React.SyntheticEvent) => void;
// здесь нам необходимо передать значение поля hasPeriod:
onChangeEndDate: OnChangeDate<???????>
}
Union
https://basarat.gitbook.io/typescript/type-system/discriminated-unions
мужик
Может что-то подобное. type EmptyOr<T extends Record<PropertyKey, any>> = | T | Partial<Record<keyof T, undefined>>; Можно определить проперти, которые отвечают за определённую логику, и если есть хоть одно, то будет требовать и остальные type Props = { headerText: string; moreMenu: ReactElement; title: string; footerButton?: ReactNode; LeftContainerItems?: ReactElement; } & EmptyOr<{ expandItems: ReactElement; isExpanded: boolean; toggleExpanded: () => void; }>;
Обсуждают сегодня