@@ -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
@@ -22745,15 +22745,18 @@ namespace ts {
22745
22745
22746
22746
function getTemplateTypePlaceholderPriority(type: Type) {
22747
22747
return type.flags & TypeFlags.String ? TemplateTypePlaceholderPriority.String :
22748
+ type.flags & TypeFlags.TemplateLiteral ? TemplateTypePlaceholderPriority.TemplateLiterals :
22749
+ type.flags & TypeFlags.StringMapping ? TemplateTypePlaceholderPriority.StringLiterals :
22748
22750
type.flags & TypeFlags.StringLiteral ? TemplateTypePlaceholderPriority.StringLiterals :
22749
22751
type.flags & TypeFlags.Number ? TemplateTypePlaceholderPriority.Number :
22752
+ type.flags & TypeFlags.Enum ? TemplateTypePlaceholderPriority.Enums :
22750
22753
type.flags & TypeFlags.NumberLiteral ? TemplateTypePlaceholderPriority.NumberLiterals :
22751
22754
type.flags & TypeFlags.BigInt ? TemplateTypePlaceholderPriority.BigInt :
22752
22755
type.flags & TypeFlags.BigIntLiteral ? TemplateTypePlaceholderPriority.BigIntLiterals :
22753
22756
type.flags & TypeFlags.Boolean ? TemplateTypePlaceholderPriority.Boolean :
22754
- type.flags & TypeFlags.BooleanLiteral ? TemplateTypePlaceholderPriority.BooleanLiterals :
22755
- type.flags & TypeFlags.Undefined ? TemplateTypePlaceholderPriority.Undefined :
22756
- type.flags & TypeFlags.Null ? TemplateTypePlaceholderPriority.Null :
22757
+ type.flags & TypeFlags.BooleanLiteral ? TemplateTypePlaceholderPriority.KeywordLiterals :
22758
+ type.flags & TypeFlags.Undefined ? TemplateTypePlaceholderPriority.KeywordLiterals :
22759
+ type.flags & TypeFlags.Null ? TemplateTypePlaceholderPriority.KeywordLiterals :
22757
22760
TemplateTypePlaceholderPriority.Never;
22758
22761
}
22759
22762
@@ -22797,7 +22800,9 @@ namespace ts {
22797
22800
const matchingType = reduceType(constraint, (matchingType, t) =>
22798
22801
!(t.flags & allTypeFlags) || getTemplateTypePlaceholderPriority(t) <= getTemplateTypePlaceholderPriority(matchingType) ? matchingType :
22799
22802
t.flags & TypeFlags.String ? source :
22800
- t.flags & TypeFlags.Number ? getNumberLiteralType(+str) : // if `str` was not a valid number, TypeFlags.Number would have been excluded above.
22803
+ t.flags & TypeFlags.TemplateLiteral && isTypeMatchedByTemplateLiteralType(source, t as TemplateLiteralType) ? source :
22804
+ t.flags & TypeFlags.StringMapping && str === applyStringMapping(t.symbol, str) ? source :
22805
+ 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.
22801
22806
t.flags & TypeFlags.BigInt ? parseBigIntLiteralType(str) : // if `str` was not a valid bigint, TypeFlags.BigInt would have been excluded above.
22802
22807
t.flags & TypeFlags.Boolean ? str === "true" ? trueType : falseType :
22803
22808
t.flags & TypeFlags.StringLiteral && (t as StringLiteralType).value === str ? t :
0 commit comments