Skip to content

Commit 7aa916a

Browse files
Strip away type arguments from tagged templates when emitting.
1 parent 090f6bd commit 7aa916a

3 files changed

Lines changed: 17 additions & 3 deletions

File tree

src/compiler/factory.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,17 +1032,19 @@ namespace ts {
10321032
: node;
10331033
}
10341034

1035-
export function createTaggedTemplate(tag: Expression, template: TemplateLiteral) {
1035+
export function createTaggedTemplate(tag: Expression, typeArguments: NodeArray<TypeNode>, template: TemplateLiteral) {
10361036
const node = <TaggedTemplateExpression>createSynthesizedNode(SyntaxKind.TaggedTemplateExpression);
10371037
node.tag = parenthesizeForAccess(tag);
1038+
node.typeArguments = typeArguments;
10381039
node.template = template;
10391040
return node;
10401041
}
10411042

1042-
export function updateTaggedTemplate(node: TaggedTemplateExpression, tag: Expression, template: TemplateLiteral) {
1043+
export function updateTaggedTemplate(node: TaggedTemplateExpression, tag: Expression, typeArguments: NodeArray<TypeNode>, template: TemplateLiteral) {
10431044
return node.tag !== tag
1045+
|| node.typeArguments !== typeArguments
10441046
|| node.template !== template
1045-
? updateNode(createTaggedTemplate(tag, template), node)
1047+
? updateNode(createTaggedTemplate(tag, typeArguments, template), node)
10461048
: node;
10471049
}
10481050

src/compiler/transformers/ts.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,9 @@ namespace ts {
502502
case SyntaxKind.NewExpression:
503503
return visitNewExpression(<NewExpression>node);
504504

505+
case SyntaxKind.TaggedTemplateExpression:
506+
return visitTaggedTemplateExpression(<TaggedTemplateExpression>node);
507+
505508
case SyntaxKind.NonNullExpression:
506509
// TypeScript non-null expressions are removed, but their subtrees are preserved.
507510
return visitNonNullExpression(<NonNullExpression>node);
@@ -2547,6 +2550,14 @@ namespace ts {
25472550
visitNodes(node.arguments, visitor, isExpression));
25482551
}
25492552

2553+
function visitTaggedTemplateExpression(node: TaggedTemplateExpression) {
2554+
return updateTaggedTemplate(
2555+
node,
2556+
visitNode(node.tag, visitor, isExpression),
2557+
/*typeArguments*/ undefined,
2558+
visitNode(node.template, visitor, isExpression));
2559+
}
2560+
25502561
/**
25512562
* Determines whether to emit an enum declaration.
25522563
*

src/compiler/visitor.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ namespace ts {
478478
case SyntaxKind.TaggedTemplateExpression:
479479
return updateTaggedTemplate(<TaggedTemplateExpression>node,
480480
visitNode((<TaggedTemplateExpression>node).tag, visitor, isExpression),
481+
visitNodes((<TaggedTemplateExpression>node).typeArguments, visitor, isExpression),
481482
visitNode((<TaggedTemplateExpression>node).template, visitor, isTemplateLiteral));
482483

483484
case SyntaxKind.TypeAssertionExpression:

0 commit comments

Comments
 (0)