mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 21:53:42 -06:00
Fix crash in union subtype reduction involving template literal and string mapping types (#52699)
This commit is contained in:
parent
6c9792aa87
commit
bd905d4936
@ -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) {
|
||||
|
||||
@ -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<string>;
|
||||
|
||||
@ -189,6 +189,10 @@ function ft1<T extends string>(t: T, u: Uppercase<T>, 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<string>;
|
||||
|
||||
|
||||
//// [templateLiteralTypes3.js]
|
||||
@ -356,3 +360,4 @@ type DotString = `${string}.${string}.${string}`;
|
||||
declare function noSpread<P extends DotString>(args: P[]): P;
|
||||
declare function spread<P extends DotString>(...args: P[]): P;
|
||||
declare function ft1<T extends string>(t: T, u: Uppercase<T>, u1: Uppercase<`1.${T}.3`>, u2: Uppercase<`1.${T}.4`>): void;
|
||||
type Boom = 'abc' | 'def' | `a${string}` | Lowercase<string>;
|
||||
|
||||
@ -580,3 +580,9 @@ function ft1<T extends string>(t: T, u: Uppercase<T>, u1: Uppercase<`1.${T}.3`>,
|
||||
>u2 : Symbol(u2, Decl(templateLiteralTypes3.ts, 185, 80))
|
||||
}
|
||||
|
||||
// Repro from #52685
|
||||
|
||||
type Boom = 'abc' | 'def' | `a${string}` | Lowercase<string>;
|
||||
>Boom : Symbol(Boom, Decl(templateLiteralTypes3.ts, 189, 1))
|
||||
>Lowercase : Symbol(Lowercase, Decl(lib.es5.d.ts, --, --))
|
||||
|
||||
|
||||
@ -594,3 +594,8 @@ function ft1<T extends string>(t: T, u: Uppercase<T>, u1: Uppercase<`1.${T}.3`>,
|
||||
>u2 : `1.${Uppercase<T>}.4`
|
||||
}
|
||||
|
||||
// Repro from #52685
|
||||
|
||||
type Boom = 'abc' | 'def' | `a${string}` | Lowercase<string>;
|
||||
>Boom : `a${string}` | Lowercase<string> | "def"
|
||||
|
||||
|
||||
@ -191,3 +191,7 @@ function ft1<T extends string>(t: T, u: Uppercase<T>, 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<string>;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user