mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-15 04:43:37 -05:00
Bypass caching in removeStringLiteralsMatchedByTemplateLiterals (#46525)
* Bypass caching in removeStringLiteralsMatchedByTemplateLiterals * Add regression test
This commit is contained in:
@@ -14203,13 +14203,13 @@ namespace ts {
|
||||
}
|
||||
|
||||
function removeStringLiteralsMatchedByTemplateLiterals(types: Type[]) {
|
||||
const templates = filter(types, isPatternLiteralType);
|
||||
const templates = filter(types, isPatternLiteralType) as TemplateLiteralType[];
|
||||
if (templates.length) {
|
||||
let i = types.length;
|
||||
while (i > 0) {
|
||||
i--;
|
||||
const t = types[i];
|
||||
if (t.flags & TypeFlags.StringLiteral && some(templates, template => isTypeSubtypeOf(t, template))) {
|
||||
if (t.flags & TypeFlags.StringLiteral && some(templates, template => isTypeMatchedByTemplateLiteralType(t, template))) {
|
||||
orderedRemoveItemAt(types, i);
|
||||
}
|
||||
}
|
||||
@@ -19090,8 +19090,7 @@ namespace ts {
|
||||
// For example, `foo-${number}` is related to `foo-${string}` even though number isn't related to string.
|
||||
instantiateType(source, makeFunctionTypeMapper(reportUnreliableMarkers));
|
||||
}
|
||||
const result = inferTypesFromTemplateLiteralType(source, target as TemplateLiteralType);
|
||||
if (result && every(result, (r, i) => isValidTypeForTemplateLiteralPlaceholder(r, (target as TemplateLiteralType).types[i]))) {
|
||||
if (isTypeMatchedByTemplateLiteralType(source, target as TemplateLiteralType)) {
|
||||
return Ternary.True;
|
||||
}
|
||||
}
|
||||
@@ -21561,6 +21560,11 @@ namespace ts {
|
||||
undefined;
|
||||
}
|
||||
|
||||
function isTypeMatchedByTemplateLiteralType(source: Type, target: TemplateLiteralType): boolean {
|
||||
const inferences = inferTypesFromTemplateLiteralType(source, target);
|
||||
return !!inferences && every(inferences, (r, i) => isValidTypeForTemplateLiteralPlaceholder(r, target.types[i]));
|
||||
}
|
||||
|
||||
function getStringLikeTypeForType(type: Type) {
|
||||
return type.flags & (TypeFlags.Any | TypeFlags.StringLike) ? type : getTemplateLiteralType(["", ""], [type]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user