У меня есть интерфейс для компонента реакции. Там есть куча свойств, но я хочу, чтобы одно свойство влияло на другие. Итак, у меня есть:
export interface IMyAwesomeComponentProps<T = {}> {
className: string
defaultPath?: ISomeOtherInterface<T>
// more properties...
// ...and finally
isDraggable?: boolean
onDrag?: () => {}
}
Эта вещь реализована так:
export class MyAwesomeComponent<T> extends React.Component<IMyAwesomeComponentProps<T>> {
//...
}
Итак, что мне делать, когда я передаю «isDraggable» как «true» ", Я хочу, чтобы" onDrag "был обязательный .
Чтобы решить эту проблему, я сначала исключил функцию" onDrag "из интерфейса и сделал новый тип. Затем я создал тип утилиты, который в основном говорит: «если это« isDraggable »- правда, а затем вернуть интерфейс в сочетании с« TDraggableProps », иначе просто верните мне интерфейс». В целом это выглядит так:
type TDraggableProps = {
onDrag: () => void
// maybe some more props
}
type Test<I extends ITreeProps> = I['isDraggable'] extends true ? I & TDraggableProps : I
export class MyAwesomeComponent<T> extends React.Component<Test<IMyAwesomeComponentProps<T>>>
А-а-а, это вроде работает, но это не так. И я понятия не имею, что делать с тем универсальным c, который входит в интерфейс.