одно поле может быть обязательным или не обязательным в зависимости от значения другого поля данного интерфейса? 
                  
                  
                  Понятно, что нужно использовать 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; }>;
Обсуждают сегодня