@@ -265,15 +265,15 @@ namespace ts {
265265
266266 const enum TemplateTypePlaceholderPriority {
267267 Never, // lowest
268- Null,
269- Undefined,
270- BooleanLiterals,
268+ KeywordLiterals, // true | false | null | undefined
271269 Boolean,
272270 BigIntLiterals,
273271 BigInt,
274272 NumberLiterals,
273+ Enums,
275274 Number,
276275 StringLiterals,
276+ TemplateLiterals,
277277 String, // highest
278278 }
279279
@@ -22636,15 +22636,18 @@ namespace ts {
2263622636
2263722637 function getTemplateTypePlaceholderPriority(type: Type) {
2263822638 return type.flags & TypeFlags.String ? TemplateTypePlaceholderPriority.String :
22639+ type.flags & TypeFlags.TemplateLiteral ? TemplateTypePlaceholderPriority.TemplateLiterals :
22640+ type.flags & TypeFlags.StringMapping ? TemplateTypePlaceholderPriority.StringLiterals :
2263922641 type.flags & TypeFlags.StringLiteral ? TemplateTypePlaceholderPriority.StringLiterals :
2264022642 type.flags & TypeFlags.Number ? TemplateTypePlaceholderPriority.Number :
22643+ type.flags & TypeFlags.Enum ? TemplateTypePlaceholderPriority.Enums :
2264122644 type.flags & TypeFlags.NumberLiteral ? TemplateTypePlaceholderPriority.NumberLiterals :
2264222645 type.flags & TypeFlags.BigInt ? TemplateTypePlaceholderPriority.BigInt :
2264322646 type.flags & TypeFlags.BigIntLiteral ? TemplateTypePlaceholderPriority.BigIntLiterals :
2264422647 type.flags & TypeFlags.Boolean ? TemplateTypePlaceholderPriority.Boolean :
22645- type.flags & TypeFlags.BooleanLiteral ? TemplateTypePlaceholderPriority.BooleanLiterals :
22646- type.flags & TypeFlags.Undefined ? TemplateTypePlaceholderPriority.Undefined :
22647- type.flags & TypeFlags.Null ? TemplateTypePlaceholderPriority.Null :
22648+ type.flags & TypeFlags.BooleanLiteral ? TemplateTypePlaceholderPriority.KeywordLiterals :
22649+ type.flags & TypeFlags.Undefined ? TemplateTypePlaceholderPriority.KeywordLiterals :
22650+ type.flags & TypeFlags.Null ? TemplateTypePlaceholderPriority.KeywordLiterals :
2264822651 TemplateTypePlaceholderPriority.Never;
2264922652 }
2265022653
@@ -22688,7 +22691,9 @@ namespace ts {
2268822691 const matchingType = reduceType(constraint, (matchingType, t) =>
2268922692 !(t.flags & allTypeFlags) || getTemplateTypePlaceholderPriority(t) <= getTemplateTypePlaceholderPriority(matchingType) ? matchingType :
2269022693 t.flags & TypeFlags.String ? source :
22691- t.flags & TypeFlags.Number ? getNumberLiteralType(+str) : // if `str` was not a valid number, TypeFlags.Number would have been excluded above.
22694+ t.flags & TypeFlags.TemplateLiteral && isTypeMatchedByTemplateLiteralType(source, t as TemplateLiteralType) ? source :
22695+ t.flags & TypeFlags.StringMapping && str === applyStringMapping(t.symbol, str) ? source :
22696+ t.flags & (TypeFlags.Number | TypeFlags.Enum) ? getNumberLiteralType(+str) : // if `str` was not a valid number, TypeFlags.Number and TypeFlags.Enum would have been excluded above.
2269222697 t.flags & TypeFlags.BigInt ? parseBigIntLiteralType(str) : // if `str` was not a valid bigint, TypeFlags.BigInt would have been excluded above.
2269322698 t.flags & TypeFlags.Boolean ? str === "true" ? trueType : falseType :
2269422699 t.flags & TypeFlags.StringLiteral && (t as StringLiteralType).value === str ? t :
0 commit comments