From 15eb1e0ce1ce7fbd7a833cef3f76c53297f7e24f Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Thu, 28 Mar 2019 11:45:33 +0100 Subject: [PATCH] refactor(core): stronger type for resolved angular decorators (#29608) PR Close #29608 --- .../static-queries/angular/directive_inputs.ts | 2 +- .../schematics/migrations/static-queries/transform.ts | 2 +- packages/core/schematics/utils/ng_decorators.ts | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/core/schematics/migrations/static-queries/angular/directive_inputs.ts b/packages/core/schematics/migrations/static-queries/angular/directive_inputs.ts index 2731d2ceb3..d9c8d20b6a 100644 --- a/packages/core/schematics/migrations/static-queries/angular/directive_inputs.ts +++ b/packages/core/schematics/migrations/static-queries/angular/directive_inputs.ts @@ -62,7 +62,7 @@ function getInputNamesFromMetadata( return null; } - const decoratorCall = decorator.node.expression as ts.CallExpression; + const decoratorCall = decorator.node.expression; // In case the decorator does define any metadata, there is no metadata // where inputs could be declared. This is an edge case because there diff --git a/packages/core/schematics/migrations/static-queries/transform.ts b/packages/core/schematics/migrations/static-queries/transform.ts index 7410b1bad4..1a4b37a575 100644 --- a/packages/core/schematics/migrations/static-queries/transform.ts +++ b/packages/core/schematics/migrations/static-queries/transform.ts @@ -16,7 +16,7 @@ import {NgQueryDefinition, QueryTiming} from './angular/query-definition'; */ export function getTransformedQueryCallExpr( query: NgQueryDefinition, timing: QueryTiming): ts.CallExpression|null { - const queryExpr = query.decorator.node.expression as ts.CallExpression; + const queryExpr = query.decorator.node.expression; const queryArguments = queryExpr.arguments; const timingPropertyAssignment = ts.createPropertyAssignment( 'static', timing === QueryTiming.STATIC ? ts.createTrue() : ts.createFalse()); diff --git a/packages/core/schematics/utils/ng_decorators.ts b/packages/core/schematics/utils/ng_decorators.ts index 5e0bdb67f9..550e2897b0 100644 --- a/packages/core/schematics/utils/ng_decorators.ts +++ b/packages/core/schematics/utils/ng_decorators.ts @@ -9,9 +9,13 @@ import * as ts from 'typescript'; import {getCallDecoratorImport} from './typescript/decorators'; +export type CallExpressionDecorator = ts.Decorator & { + expression: ts.CallExpression; +} + export interface NgDecorator { name: string; - node: ts.Decorator; + node: CallExpressionDecorator; } /** @@ -22,5 +26,7 @@ export function getAngularDecorators( typeChecker: ts.TypeChecker, decorators: ReadonlyArray): NgDecorator[] { return decorators.map(node => ({node, importData: getCallDecoratorImport(typeChecker, node)})) .filter(({importData}) => importData && importData.importModule.startsWith('@angular/')) - .map(({node, importData}) => ({node, name: importData !.name})); + .map( + ({node, importData}) => + ({node: node as CallExpressionDecorator, name: importData !.name})); }