diff --git a/modules/@angular/core/src/util/decorators.ts b/modules/@angular/core/src/util/decorators.ts index ed8fe7b0682021..a9fcee2836086f 100644 --- a/modules/@angular/core/src/util/decorators.ts +++ b/modules/@angular/core/src/util/decorators.ts @@ -243,7 +243,8 @@ export function Class(clsDef: ClassDefinition): Type { Reflect.defineMetadata('annotations', this.annotations, constructor); } - if (!constructor['name']) { + const constructorName = constructor['name']; + if (!constructorName || constructorName === 'constructor') { (constructor as any)['overriddenName'] = `class${_nextClassId++}`; } diff --git a/modules/@angular/core/test/util/decorators_spec.ts b/modules/@angular/core/test/util/decorators_spec.ts index 5300a0d59ae7b7..1b14ef096896b4 100644 --- a/modules/@angular/core/test/util/decorators_spec.ts +++ b/modules/@angular/core/test/util/decorators_spec.ts @@ -132,6 +132,10 @@ export function main() { .toThrowError( 'Class definition \'extends\' property must be a constructor function was: non_type'); }); + + it('should assign an overridden name for annonymous constructor functions', () => { + expect((Class({constructor: function() {}}) as any).overriddenName).not.toBeUndefined(); + }); }); }); });