diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3a888dc5277..93f559c1faa 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -16124,7 +16124,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function removeStringLiteralsMatchedByTemplateLiterals(types: Type[]) { - const templates = filter(types, isPatternLiteralType) as TemplateLiteralType[]; + const templates = filter(types, t => !!(t.flags & TypeFlags.TemplateLiteral) && isPatternLiteralType(t)) as TemplateLiteralType[]; if (templates.length) { let i = types.length; while (i > 0) { diff --git a/tests/baselines/reference/templateLiteralTypes3.errors.txt b/tests/baselines/reference/templateLiteralTypes3.errors.txt index 5a70a5a5f8d..0757775e413 100644 --- a/tests/baselines/reference/templateLiteralTypes3.errors.txt +++ b/tests/baselines/reference/templateLiteralTypes3.errors.txt @@ -217,4 +217,8 @@ tests/cases/conformance/types/literal/templateLiteralTypes3.ts(141,9): error TS2 spread(`1.${u}.3`, `1.${u}.4`); spread(u1, u2); } + + // Repro from #52685 + + type Boom = 'abc' | 'def' | `a${string}` | Lowercase; \ No newline at end of file diff --git a/tests/baselines/reference/templateLiteralTypes3.js b/tests/baselines/reference/templateLiteralTypes3.js index f25296c0aef..a644bb56088 100644 --- a/tests/baselines/reference/templateLiteralTypes3.js +++ b/tests/baselines/reference/templateLiteralTypes3.js @@ -189,6 +189,10 @@ function ft1(t: T, u: Uppercase, u1: Uppercase<`1.${T}.3`>, spread(`1.${u}.3`, `1.${u}.4`); spread(u1, u2); } + +// Repro from #52685 + +type Boom = 'abc' | 'def' | `a${string}` | Lowercase; //// [templateLiteralTypes3.js] @@ -356,3 +360,4 @@ type DotString = `${string}.${string}.${string}`; declare function noSpread

(args: P[]): P; declare function spread

(...args: P[]): P; declare function ft1(t: T, u: Uppercase, u1: Uppercase<`1.${T}.3`>, u2: Uppercase<`1.${T}.4`>): void; +type Boom = 'abc' | 'def' | `a${string}` | Lowercase; diff --git a/tests/baselines/reference/templateLiteralTypes3.symbols b/tests/baselines/reference/templateLiteralTypes3.symbols index 47f4ee7fe6e..cfb3b01c7a4 100644 --- a/tests/baselines/reference/templateLiteralTypes3.symbols +++ b/tests/baselines/reference/templateLiteralTypes3.symbols @@ -580,3 +580,9 @@ function ft1(t: T, u: Uppercase, u1: Uppercase<`1.${T}.3`>, >u2 : Symbol(u2, Decl(templateLiteralTypes3.ts, 185, 80)) } +// Repro from #52685 + +type Boom = 'abc' | 'def' | `a${string}` | Lowercase; +>Boom : Symbol(Boom, Decl(templateLiteralTypes3.ts, 189, 1)) +>Lowercase : Symbol(Lowercase, Decl(lib.es5.d.ts, --, --)) + diff --git a/tests/baselines/reference/templateLiteralTypes3.types b/tests/baselines/reference/templateLiteralTypes3.types index 3fb7144050b..c2822fa8d27 100644 --- a/tests/baselines/reference/templateLiteralTypes3.types +++ b/tests/baselines/reference/templateLiteralTypes3.types @@ -594,3 +594,8 @@ function ft1(t: T, u: Uppercase, u1: Uppercase<`1.${T}.3`>, >u2 : `1.${Uppercase}.4` } +// Repro from #52685 + +type Boom = 'abc' | 'def' | `a${string}` | Lowercase; +>Boom : `a${string}` | Lowercase | "def" + diff --git a/tests/cases/conformance/types/literal/templateLiteralTypes3.ts b/tests/cases/conformance/types/literal/templateLiteralTypes3.ts index 8c47fff8cb2..3103c48201d 100644 --- a/tests/cases/conformance/types/literal/templateLiteralTypes3.ts +++ b/tests/cases/conformance/types/literal/templateLiteralTypes3.ts @@ -191,3 +191,7 @@ function ft1(t: T, u: Uppercase, u1: Uppercase<`1.${T}.3`>, spread(`1.${u}.3`, `1.${u}.4`); spread(u1, u2); } + +// Repro from #52685 + +type Boom = 'abc' | 'def' | `a${string}` | Lowercase;