javascript - Cum pot să extind o interfață de bază dinamic?


Folosesc react-query și am multe hook-uri useQuery care acceptă acești parametri:

export interface UseQueryHookProps<K> {
  client: K;
  isEnabled?: boolean;
}

Cum aș scrie interfața pentru a fi mai generică, pentru a accepta orice sau mai degrabă interfață/e suplimentară necunoscută?

Deci ceva de genul acesta:

export interface UseQueryHookProps<K, T> extends T {
  client: K;
  isEnabled?: boolean;
}

Unde ar fi apelat UseQueryHookProps:

export const useGetJob = ({
  client: monitoringService,
  isEnabled = true,
  jobId,
}: UseQueryHookProps<MonitoringServiceClient, {jobId: string}>) 

Nu sunt sigur cum să scriu asta?

Răspuns #1

Nu aveți voie să extindeți interface-ul cu T. Pentru a face acest lucru - T ar trebui să fie cunoscut static.

Dacă vrei să extinzi UseQueryHookProps cu T, ar trebui să folosești sintaxa type în loc de interface.

export interface UseQueryHookProps<K> {
  client: K;
  isEnabled?: boolean;
}

type ExtendHookProps<K, T> = UseQueryHookProps<K> & T

interface MonitoringServiceClient {
  tag: 'MonitoringServiceClient'
}

export const useGetJob = ({
  client: monitoringService,
  isEnabled = true,
  jobId,
}: ExtendHookProps<MonitoringServiceClient, { jobId: string }>) => {

}

Teren de joacă