export interface Provider { isProvider(provider: unknown): provider is T; call(provider: T, contractAddress: string, data: string): 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>;