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ă
