@@ -265,15 +265,15 @@ namespace ts {
265
265
266
266
const enum TemplateTypePlaceholderPriority {
267
267
Never, // lowest
268
- Null,
269
- Undefined,
270
- BooleanLiterals,
268
+ KeywordLiterals, // true | false | null | undefined
271
269
Boolean,
272
270
BigIntLiterals,
273
271
BigInt,
274
272
NumberLiterals,
273
+ Enums,
275
274
Number,
276
275
StringLiterals,
276
+ TemplateLiterals,
277
277
String, // highest
278
278
}
279
279
@@ -22636,15 +22636,18 @@ namespace ts {
22636
22636
22637
22637
function getTemplateTypePlaceholderPriority(type: Type) {
22638
22638
return type.flags & TypeFlags.String ? TemplateTypePlaceholderPriority.String :
22639
+ type.flags & TypeFlags.TemplateLiteral ? TemplateTypePlaceholderPriority.TemplateLiterals :
22640
+ type.flags & TypeFlags.StringMapping ? TemplateTypePlaceholderPriority.StringLiterals :
22639
22641
type.flags & TypeFlags.StringLiteral ? TemplateTypePlaceholderPriority.StringLiterals :
22640
22642
type.flags & TypeFlags.Number ? TemplateTypePlaceholderPriority.Number :
22643
+ type.flags & TypeFlags.Enum ? TemplateTypePlaceholderPriority.Enums :
22641
22644
type.flags & TypeFlags.NumberLiteral ? TemplateTypePlaceholderPriority.NumberLiterals :
22642
22645
type.flags & TypeFlags.BigInt ? TemplateTypePlaceholderPriority.BigInt :
22643
22646
type.flags & TypeFlags.BigIntLiteral ? TemplateTypePlaceholderPriority.BigIntLiterals :
22644
22647
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 :
22648
22651
TemplateTypePlaceholderPriority.Never;
22649
22652
}
22650
22653
@@ -22688,7 +22691,9 @@ namespace ts {
22688
22691
const matchingType = reduceType(constraint, (matchingType, t) =>
22689
22692
!(t.flags & allTypeFlags) || getTemplateTypePlaceholderPriority(t) <= getTemplateTypePlaceholderPriority(matchingType) ? matchingType :
22690
22693
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.
22692
22697
t.flags & TypeFlags.BigInt ? parseBigIntLiteralType(str) : // if `str` was not a valid bigint, TypeFlags.BigInt would have been excluded above.
22693
22698
t.flags & TypeFlags.Boolean ? str === "true" ? trueType : falseType :
22694
22699
t.flags & TypeFlags.StringLiteral && (t as StringLiteralType).value === str ? t :
0 commit comments