fix(ivy): include type parameter for ngBaseDef declaration (#31210)

When a class uses Angular decorators such as `@Input`, `@Output` and
friends without an Angular class decorator, they are compiled into a
static `ngBaseDef` field on the class, with the TypeScript declaration
of the class being altered to declare the `ngBaseDef` field to be of type
`ɵɵBaseDef`. This type however requires a generic type parameter that
corresponds with the type of the class, however the compiler did not
provide this type parameter. As a result, compiling a program where such
invalid `ngBaseDef` declarations are present will result in compilation
errors.

This commit fixes the problem by providing the generic type parameter.

Fixes #31160

PR Close #31210
This commit is contained in:
JoostK
2019-06-22 17:22:50 +02:00
committed by Alex Rickabaugh
parent a4a423a083
commit eb6281f5b4
6 changed files with 30 additions and 4 deletions

View File

@ -423,6 +423,24 @@ runInEachFileSystem(os => {
expect(jsContents).toContain('background-color: blue');
});
it('should include generic type for ngBaseDef declarations', () => {
env.write('test.ts', `
import {Component, Input, NgModule} from '@angular/core';
export class TestBase {
@Input() input: any;
}
`);
env.driveMain();
const jsContents = env.getContents('test.js');
expect(jsContents).toContain('i0.ɵɵdefineBase({ inputs: { input: "input" } });');
const dtsContents = env.getContents('test.d.ts');
expect(dtsContents).toContain('static ngBaseDef: i0.ɵɵBaseDef<TestBase>');
});
it('should compile NgModules without errors', () => {
env.write('test.ts', `
import {Component, NgModule} from '@angular/core';