From 856e74ac98fd52936f0f40863d921bb703ab63da Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Mon, 21 Sep 2020 12:34:07 +0100 Subject: [PATCH] refactor(compiler-cli): remove undesirable cast in the type translator (#38775) The cast to `ts.Identifier` was a hack that "just happened to work". The new approach is more robust and doesn't have to undermine the type checker. PR Close #38775 --- .../compiler-cli/src/ngtsc/translator/src/translator.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/compiler-cli/src/ngtsc/translator/src/translator.ts b/packages/compiler-cli/src/ngtsc/translator/src/translator.ts index 84c1d926f1..0c40567378 100644 --- a/packages/compiler-cli/src/ngtsc/translator/src/translator.ts +++ b/packages/compiler-cli/src/ngtsc/translator/src/translator.ts @@ -742,9 +742,12 @@ export class TypeTranslatorVisitor implements ExpressionVisitor, TypeVisitor { } visitTypeofExpr(ast: TypeofExpr, context: Context): ts.TypeQueryNode { - let expr = translateExpression( - ast.expr, this.imports, NOOP_DEFAULT_IMPORT_RECORDER, ts.ScriptTarget.ES2015); - return ts.createTypeQueryNode(expr as ts.Identifier); + const typeNode = this.translateExpression(ast.expr, context); + if (!ts.isTypeReferenceNode(typeNode)) { + throw new Error(`The target of a typeof expression must be a type reference, but it was + ${ts.SyntaxKind[typeNode.kind]}`); + } + return ts.createTypeQueryNode(typeNode.typeName); } private translateType(type: Type, context: Context): ts.TypeNode {