diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6690fa352cfe5..39540fbdbb83c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13373,6 +13373,9 @@ namespace ts { includes & TypeFlags.VoidLike && includes & (TypeFlags.DisjointDomains & ~TypeFlags.VoidLike)) { return neverType; } + if (includes & TypeFlags.TemplateLiteral && includes & TypeFlags.StringLiteral && extractRedundantTemplateLiterals(typeSet)) { + return neverType; + } if (includes & TypeFlags.Any) { return includes & TypeFlags.IncludesWildcard ? wildcardType : anyType; } @@ -13424,12 +13427,7 @@ namespace ts { } } else { - if (includes & TypeFlags.TemplateLiteral && includes & TypeFlags.StringLiteral && extractRedundantTemplateLiterals(typeSet)) { - result = neverType; - } - else { - result = createIntersectionType(typeSet, aliasSymbol, aliasTypeArguments); - } + result = createIntersectionType(typeSet, aliasSymbol, aliasTypeArguments); } intersectionTypes.set(id, result); } diff --git a/tests/baselines/reference/templateLiteralTypesPatterns.errors.txt b/tests/baselines/reference/templateLiteralTypesPatterns.errors.txt index de5efa3fe1314..652eee291b6e4 100644 --- a/tests/baselines/reference/templateLiteralTypesPatterns.errors.txt +++ b/tests/baselines/reference/templateLiteralTypesPatterns.errors.txt @@ -332,4 +332,10 @@ tests/cases/conformance/types/literal/templateLiteralTypesPatterns.ts(160,7): er const exampleBad: B = "anything"; // fails ~~~~~~~~~~ !!! error TS2322: Type '"anything"' is not assignable to type '`${number} ${number}`'. - const exampleGood: B = "1 2"; // ok \ No newline at end of file + const exampleGood: B = "1 2"; // ok + + // Repro from #41161 + + var aa: '0'; + var aa: '0' & `${number}`; + \ No newline at end of file diff --git a/tests/baselines/reference/templateLiteralTypesPatterns.js b/tests/baselines/reference/templateLiteralTypesPatterns.js index 51fdba1113c1c..09df226a97b9e 100644 --- a/tests/baselines/reference/templateLiteralTypesPatterns.js +++ b/tests/baselines/reference/templateLiteralTypesPatterns.js @@ -159,7 +159,13 @@ const shouldWork2: AGen = null as any as AGen; type A = `${number}`; type B = `${A} ${A}`; const exampleBad: B = "anything"; // fails -const exampleGood: B = "1 2"; // ok +const exampleGood: B = "1 2"; // ok + +// Repro from #41161 + +var aa: '0'; +var aa: '0' & `${number}`; + //// [templateLiteralTypesPatterns.js] "use strict"; @@ -280,3 +286,6 @@ var shouldWork1 = null; var shouldWork2 = null; var exampleBad = "anything"; // fails var exampleGood = "1 2"; // ok +// Repro from #41161 +var aa; +var aa; diff --git a/tests/baselines/reference/templateLiteralTypesPatterns.symbols b/tests/baselines/reference/templateLiteralTypesPatterns.symbols index 51810c9959efa..8c1f1739fae68 100644 --- a/tests/baselines/reference/templateLiteralTypesPatterns.symbols +++ b/tests/baselines/reference/templateLiteralTypesPatterns.symbols @@ -393,3 +393,11 @@ const exampleGood: B = "1 2"; // ok >exampleGood : Symbol(exampleGood, Decl(templateLiteralTypesPatterns.ts, 160, 5)) >B : Symbol(B, Decl(templateLiteralTypesPatterns.ts, 157, 21)) +// Repro from #41161 + +var aa: '0'; +>aa : Symbol(aa, Decl(templateLiteralTypesPatterns.ts, 164, 3), Decl(templateLiteralTypesPatterns.ts, 165, 3)) + +var aa: '0' & `${number}`; +>aa : Symbol(aa, Decl(templateLiteralTypesPatterns.ts, 164, 3), Decl(templateLiteralTypesPatterns.ts, 165, 3)) + diff --git a/tests/baselines/reference/templateLiteralTypesPatterns.types b/tests/baselines/reference/templateLiteralTypesPatterns.types index 02dc985ee5bfc..ad27b431f4b0a 100644 --- a/tests/baselines/reference/templateLiteralTypesPatterns.types +++ b/tests/baselines/reference/templateLiteralTypesPatterns.types @@ -552,3 +552,11 @@ const exampleGood: B = "1 2"; // ok >exampleGood : `${number} ${number}` >"1 2" : "1 2" +// Repro from #41161 + +var aa: '0'; +>aa : "0" + +var aa: '0' & `${number}`; +>aa : "0" + diff --git a/tests/cases/conformance/types/literal/templateLiteralTypesPatterns.ts b/tests/cases/conformance/types/literal/templateLiteralTypesPatterns.ts index 064fb5b06d631..494fff1768039 100644 --- a/tests/cases/conformance/types/literal/templateLiteralTypesPatterns.ts +++ b/tests/cases/conformance/types/literal/templateLiteralTypesPatterns.ts @@ -159,4 +159,9 @@ const shouldWork2: AGen = null as any as AGen; type A = `${number}`; type B = `${A} ${A}`; const exampleBad: B = "anything"; // fails -const exampleGood: B = "1 2"; // ok \ No newline at end of file +const exampleGood: B = "1 2"; // ok + +// Repro from #41161 + +var aa: '0'; +var aa: '0' & `${number}`;