fix(compiler): Generates function expressions as returning any (#9980)
Function expressions are used in an expression context so untyped function expressions should have any as the result type. Fixes: #9877
This commit is contained in:
parent
d1a3e3aff1
commit
eb5763c23f
|
@ -6,7 +6,8 @@
|
||||||
* found in the LICENSE file at https://angular.io/license
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {Component, QueryList, ViewChild, ViewChildren} from '@angular/core';
|
import {NgFor} from '@angular/common';
|
||||||
|
import {Component, Directive, QueryList, ViewChild, ViewChildren} from '@angular/core';
|
||||||
|
|
||||||
@Component({selector: 'comp-for-child-query', template: 'child'})
|
@Component({selector: 'comp-for-child-query', template: 'child'})
|
||||||
export class CompForChildQuery {
|
export class CompForChildQuery {
|
||||||
|
@ -21,3 +22,20 @@ export class CompWithChildQuery {
|
||||||
@ViewChild(CompForChildQuery) child: CompForChildQuery;
|
@ViewChild(CompForChildQuery) child: CompForChildQuery;
|
||||||
@ViewChildren(CompForChildQuery) children: QueryList<CompForChildQuery>;
|
@ViewChildren(CompForChildQuery) children: QueryList<CompForChildQuery>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Directive({selector: '[directive-for-query]'})
|
||||||
|
export class DirectiveForQuery {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'comp-with-directive-child',
|
||||||
|
directives: [DirectiveForQuery, NgFor],
|
||||||
|
template: `<div>
|
||||||
|
<div *ngFor="let data of divData" directive-for-query>{{data}}</div>
|
||||||
|
</div>`
|
||||||
|
})
|
||||||
|
export class CompWithDirectiveChild {
|
||||||
|
@ViewChildren(DirectiveForQuery) children: QueryList<DirectiveForQuery>;
|
||||||
|
|
||||||
|
divData: string[];
|
||||||
|
}
|
||||||
|
|
|
@ -170,7 +170,7 @@ class _TsEmitterVisitor extends AbstractEmitterVisitor implements o.TypeVisitor
|
||||||
ctx.print(`(`);
|
ctx.print(`(`);
|
||||||
this._visitParams(ast.params, ctx);
|
this._visitParams(ast.params, ctx);
|
||||||
ctx.print(`):`);
|
ctx.print(`):`);
|
||||||
this.visitType(ast.type, ctx, 'void');
|
this.visitType(ast.type, ctx);
|
||||||
ctx.println(` => {`);
|
ctx.println(` => {`);
|
||||||
ctx.incIndent();
|
ctx.incIndent();
|
||||||
this.visitAllStatements(ast.statements, ctx);
|
this.visitAllStatements(ast.statements, ctx);
|
||||||
|
|
|
@ -143,11 +143,11 @@ export function main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should support function expressions', () => {
|
it('should support function expressions', () => {
|
||||||
expect(emitStmt(o.fn([], []).toStmt())).toEqual(['():void => {', '};'].join('\n'));
|
expect(emitStmt(o.fn([], []).toStmt())).toEqual(['():any => {', '};'].join('\n'));
|
||||||
expect(emitStmt(o.fn([], [new o.ReturnStatement(o.literal(1))], o.INT_TYPE).toStmt()))
|
expect(emitStmt(o.fn([], [new o.ReturnStatement(o.literal(1))], o.INT_TYPE).toStmt()))
|
||||||
.toEqual(['():number => {', ' return 1;\n};'].join('\n'));
|
.toEqual(['():number => {', ' return 1;\n};'].join('\n'));
|
||||||
expect(emitStmt(o.fn([new o.FnParam('param1', o.INT_TYPE)], []).toStmt())).toEqual([
|
expect(emitStmt(o.fn([new o.FnParam('param1', o.INT_TYPE)], []).toStmt())).toEqual([
|
||||||
'(param1:number):void => {', '};'
|
'(param1:number):any => {', '};'
|
||||||
].join('\n'));
|
].join('\n'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue