=== tests/cases/compiler/declarationEmitLocalClassDeclarationMixin.ts === interface Constructor { new (...args: any[]): C; } >args : any[] function mixin>(Base: B) { >mixin : >(Base: B) => { new (...args: any[]): PrivateMixed; prototype: mixin.PrivateMixed; } & B >Base : B class PrivateMixed extends Base { >PrivateMixed : PrivateMixed >Base : {} bar = 2; >bar : number >2 : 2 } return PrivateMixed; >PrivateMixed : { new (...args: any[]): PrivateMixed; prototype: mixin.PrivateMixed; } & B } export class Unmixed { >Unmixed : Unmixed foo = 1; >foo : number >1 : 1 } export const Mixed = mixin(Unmixed); >Mixed : { new (...args: any[]): mixin.PrivateMixed; prototype: mixin.PrivateMixed; } & typeof Unmixed >mixin(Unmixed) : { new (...args: any[]): mixin.PrivateMixed; prototype: mixin.PrivateMixed; } & typeof Unmixed >mixin : >(Base: B) => { new (...args: any[]): PrivateMixed; prototype: mixin.PrivateMixed; } & B >Unmixed : typeof Unmixed function Filter>(ctor: C) { >Filter : >(ctor: C) => ((abstract new (...args: any[]) => FilterMixin) & { prototype: Filter.FilterMixin; }) & C >ctor : C abstract class FilterMixin extends ctor { >FilterMixin : FilterMixin >ctor : {} abstract match(path: string): boolean; >match : (path: string) => boolean >path : string // other concrete methods, fields, constructor thing = 12; >thing : number >12 : 12 } return FilterMixin; >FilterMixin : ((abstract new (...args: any[]) => FilterMixin) & { prototype: Filter.FilterMixin; }) & C } export class FilteredThing extends Filter(Unmixed) { >FilteredThing : FilteredThing >Filter(Unmixed) : Filter.FilterMixin & Unmixed >Filter : >(ctor: C) => ((abstract new (...args: any[]) => FilterMixin) & { prototype: Filter.FilterMixin; }) & C >Unmixed : typeof Unmixed match(path: string) { >match : (path: string) => boolean >path : string return false; >false : false } }