type DragLayer = <D, P, S, CP, C: React$Component<D, P, S>>(
  collect: (monitor: DragLayerMonitor) => CP,
  options?: DndOptions<P>
) => (component: Class<C> | (props: P) => ?React$Element<*>) => Class<DndComponent<C, D, $Diff<P, CP>, S>>;