interface I { (strs: TemplateStringsArray, ...subs: number[]): I; member: { new(s: string): { new(n: number): { new(): boolean; } } }; } var f: I; var x = new new new f`abc${0}def`.member("hello")(42) === true;