export interface Provider { isProvider(provider: unknown): provider is T; send(provider: T, method: string, params: unknown[]): Promise; } export type InferProviderType

= { [K in keyof P]: P[K] extends P[number] ? (P[K] extends Provider ? T : never) : never; }; export type TupleToUnion

= P[number]; export type ProviderType

= TupleToUnion>;