Skip to content

Commit bd905d4

Browse files
authored
Fix crash in union subtype reduction involving template literal and string mapping types (#52699)
1 parent 6c9792a commit bd905d4

File tree

6 files changed

+25
-1
lines changed

6 files changed

+25
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16124,7 +16124,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1612416124
}
1612516125

1612616126
function removeStringLiteralsMatchedByTemplateLiterals(types: Type[]) {
16127-
const templates = filter(types, isPatternLiteralType) as TemplateLiteralType[];
16127+
const templates = filter(types, t => !!(t.flags & TypeFlags.TemplateLiteral) && isPatternLiteralType(t)) as TemplateLiteralType[];
1612816128
if (templates.length) {
1612916129
let i = types.length;
1613016130
while (i > 0) {

tests/baselines/reference/templateLiteralTypes3.errors.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,4 +217,8 @@ tests/cases/conformance/types/literal/templateLiteralTypes3.ts(141,9): error TS2
217217
spread(`1.${u}.3`, `1.${u}.4`);
218218
spread(u1, u2);
219219
}
220+
221+
// Repro from #52685
222+
223+
type Boom = 'abc' | 'def' | `a${string}` | Lowercase<string>;
220224

tests/baselines/reference/templateLiteralTypes3.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ function ft1<T extends string>(t: T, u: Uppercase<T>, u1: Uppercase<`1.${T}.3`>,
189189
spread(`1.${u}.3`, `1.${u}.4`);
190190
spread(u1, u2);
191191
}
192+
193+
// Repro from #52685
194+
195+
type Boom = 'abc' | 'def' | `a${string}` | Lowercase<string>;
192196

193197

194198
//// [templateLiteralTypes3.js]
@@ -356,3 +360,4 @@ type DotString = `${string}.${string}.${string}`;
356360
declare function noSpread<P extends DotString>(args: P[]): P;
357361
declare function spread<P extends DotString>(...args: P[]): P;
358362
declare function ft1<T extends string>(t: T, u: Uppercase<T>, u1: Uppercase<`1.${T}.3`>, u2: Uppercase<`1.${T}.4`>): void;
363+
type Boom = 'abc' | 'def' | `a${string}` | Lowercase<string>;

tests/baselines/reference/templateLiteralTypes3.symbols

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,3 +580,9 @@ function ft1<T extends string>(t: T, u: Uppercase<T>, u1: Uppercase<`1.${T}.3`>,
580580
>u2 : Symbol(u2, Decl(templateLiteralTypes3.ts, 185, 80))
581581
}
582582

583+
// Repro from #52685
584+
585+
type Boom = 'abc' | 'def' | `a${string}` | Lowercase<string>;
586+
>Boom : Symbol(Boom, Decl(templateLiteralTypes3.ts, 189, 1))
587+
>Lowercase : Symbol(Lowercase, Decl(lib.es5.d.ts, --, --))
588+

tests/baselines/reference/templateLiteralTypes3.types

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,3 +594,8 @@ function ft1<T extends string>(t: T, u: Uppercase<T>, u1: Uppercase<`1.${T}.3`>,
594594
>u2 : `1.${Uppercase<T>}.4`
595595
}
596596

597+
// Repro from #52685
598+
599+
type Boom = 'abc' | 'def' | `a${string}` | Lowercase<string>;
600+
>Boom : `a${string}` | Lowercase<string> | "def"
601+

tests/cases/conformance/types/literal/templateLiteralTypes3.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,7 @@ function ft1<T extends string>(t: T, u: Uppercase<T>, u1: Uppercase<`1.${T}.3`>,
191191
spread(`1.${u}.3`, `1.${u}.4`);
192192
spread(u1, u2);
193193
}
194+
195+
// Repro from #52685
196+
197+
type Boom = 'abc' | 'def' | `a${string}` | Lowercase<string>;

0 commit comments

Comments
 (0)