From fbc0ccc92f892148d92c364ae3e76fded30ad140 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 20 Mar 2023 22:11:01 -0700 Subject: [PATCH] Ignore template literal types which contain intersections in removeStringLiteralsMatchedByTemplateLiterals --- src/compiler/checker.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2f9ad3e33041d..bc07249621e63 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -16339,7 +16339,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function removeStringLiteralsMatchedByTemplateLiterals(types: Type[]) { - const templates = filter(types, t => !!(t.flags & TypeFlags.TemplateLiteral) && isPatternLiteralType(t)) as TemplateLiteralType[]; + // Skip TemplateLiteralTypes which contain intersections; plain string literals can never match these. + const templates = filter(types, t => !!(t.flags & TypeFlags.TemplateLiteral) && isPatternLiteralType(t) && !some((t as TemplateLiteralType).types, t2 => !!(t2.flags & TypeFlags.Intersection))) as TemplateLiteralType[]; if (templates.length) { let i = types.length; while (i > 0) {