如何动态扩展基本接口?

How do I extend a base interface dynamically?

我正在使用 react-query 并且有很多 useQuery 接受这些参数的挂钩:

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

我将如何编写更通用的接口以接受任何或更确切地说未知的附加 interface/s?

所以像这样:

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

UseQueryHookProps 的调用位置:

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

我不知道怎么写?

您不能使用 T 扩展接口。为了做到这一点 - T 应该是静态已知的。

如果你想用 T 扩展 UseQueryHookProps 你应该使用 type 语法而不是 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 }>) => {

}

Playground