type AnyFunction = (...args: any[]) => any; type Params = Parameters>; interface Wrapper { call(event: K, ...args: Params): void; } interface AWrapped { foo(): void; } class A { foo: Wrapper; } interface BWrapped extends AWrapped { bar(): void; } class B extends A { foo: Wrapper; }