@@ -263,20 +263,6 @@ namespace ts {
263
263
VoidIsNonOptional = 1 << 1,
264
264
}
265
265
266
- const enum TemplateTypePlaceholderPriority {
267
- Never, // lowest
268
- KeywordLiterals, // true | false | null | undefined
269
- Boolean,
270
- BigIntLiterals,
271
- BigInt,
272
- NumberLiterals,
273
- Enums,
274
- Number,
275
- StringLiterals,
276
- TemplateLiterals,
277
- String, // highest
278
- }
279
-
280
266
const enum IntrinsicTypeKind {
281
267
Uppercase,
282
268
Lowercase,
@@ -22743,23 +22729,6 @@ namespace ts {
22743
22729
}
22744
22730
}
22745
22731
22746
- function getTemplateTypePlaceholderPriority(type: Type) {
22747
- return type.flags & TypeFlags.String ? TemplateTypePlaceholderPriority.String :
22748
- type.flags & TypeFlags.TemplateLiteral ? TemplateTypePlaceholderPriority.TemplateLiterals :
22749
- type.flags & TypeFlags.StringMapping ? TemplateTypePlaceholderPriority.StringLiterals :
22750
- type.flags & TypeFlags.StringLiteral ? TemplateTypePlaceholderPriority.StringLiterals :
22751
- type.flags & TypeFlags.Number ? TemplateTypePlaceholderPriority.Number :
22752
- type.flags & TypeFlags.Enum ? TemplateTypePlaceholderPriority.Enums :
22753
- type.flags & TypeFlags.NumberLiteral ? TemplateTypePlaceholderPriority.NumberLiterals :
22754
- type.flags & TypeFlags.BigInt ? TemplateTypePlaceholderPriority.BigInt :
22755
- type.flags & TypeFlags.BigIntLiteral ? TemplateTypePlaceholderPriority.BigIntLiterals :
22756
- type.flags & TypeFlags.Boolean ? TemplateTypePlaceholderPriority.Boolean :
22757
- type.flags & TypeFlags.BooleanLiteral ? TemplateTypePlaceholderPriority.KeywordLiterals :
22758
- type.flags & TypeFlags.Undefined ? TemplateTypePlaceholderPriority.KeywordLiterals :
22759
- type.flags & TypeFlags.Null ? TemplateTypePlaceholderPriority.KeywordLiterals :
22760
- TemplateTypePlaceholderPriority.Never;
22761
- }
22762
-
22763
22732
function inferToTemplateLiteralType(source: Type, target: TemplateLiteralType) {
22764
22733
const matches = inferTypesFromTemplateLiteralType(source, target);
22765
22734
const types = target.types;
@@ -22797,19 +22766,22 @@ namespace ts {
22797
22766
}
22798
22767
22799
22768
// for each type in the constraint, find the highest priority matching type
22800
- const matchingType = reduceType(constraint, (matchingType, t) =>
22801
- !(t.flags & allTypeFlags) || getTemplateTypePlaceholderPriority(t) <= getTemplateTypePlaceholderPriority(matchingType) ? matchingType :
22802
- t.flags & TypeFlags.String ? source :
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.
22806
- t.flags & TypeFlags.BigInt ? parseBigIntLiteralType(str) : // if `str` was not a valid bigint, TypeFlags.BigInt would have been excluded above.
22807
- t.flags & TypeFlags.Boolean ? str === "true" ? trueType : falseType :
22808
- t.flags & TypeFlags.StringLiteral && (t as StringLiteralType).value === str ? t :
22809
- t.flags & TypeFlags.NumberLiteral && (t as NumberLiteralType).value === +str ? t :
22810
- t.flags & TypeFlags.BigIntLiteral && pseudoBigIntToString((t as BigIntLiteralType).value) === str ? t :
22811
- t.flags & (TypeFlags.BooleanLiteral | TypeFlags.Nullable) && (t as IntrinsicType).intrinsicName === str ? t :
22812
- matchingType,
22769
+ const matchingType = reduceType(constraint, (left, right) =>
22770
+ !(right.flags & allTypeFlags) ? left :
22771
+ left.flags & TypeFlags.String ? left : right.flags & TypeFlags.String ? source :
22772
+ left.flags & TypeFlags.TemplateLiteral ? left : right.flags & TypeFlags.TemplateLiteral && isTypeMatchedByTemplateLiteralType(source, right as TemplateLiteralType) ? source :
22773
+ left.flags & TypeFlags.StringMapping ? left : right.flags & TypeFlags.StringMapping && str === applyStringMapping(right.symbol, str) ? source :
22774
+ left.flags & TypeFlags.StringLiteral ? left : right.flags & TypeFlags.StringLiteral && (right as StringLiteralType).value === str ? right :
22775
+ left.flags & TypeFlags.Number ? left : right.flags & TypeFlags.Number ? getNumberLiteralType(+str) :
22776
+ left.flags & TypeFlags.Enum ? left : right.flags & TypeFlags.Enum ? getNumberLiteralType(+str) :
22777
+ left.flags & TypeFlags.NumberLiteral ? left : right.flags & TypeFlags.NumberLiteral && (right as NumberLiteralType).value === +str ? right :
22778
+ left.flags & TypeFlags.BigInt ? left : right.flags & TypeFlags.BigInt ? parseBigIntLiteralType(str) :
22779
+ left.flags & TypeFlags.BigIntLiteral ? left : right.flags & TypeFlags.BigIntLiteral && pseudoBigIntToString((right as BigIntLiteralType).value) === str ? right :
22780
+ left.flags & TypeFlags.Boolean ? left : right.flags & TypeFlags.Boolean ? str === "true" ? trueType : falseType :
22781
+ left.flags & TypeFlags.BooleanLiteral ? left : right.flags & TypeFlags.BooleanLiteral && (right as IntrinsicType).intrinsicName === str ? right :
22782
+ left.flags & TypeFlags.Undefined ? left : right.flags & TypeFlags.Undefined && (right as IntrinsicType).intrinsicName === str ? right :
22783
+ left.flags & TypeFlags.Null ? left : right.flags & TypeFlags.Null && (right as IntrinsicType).intrinsicName === str ? right :
22784
+ left,
22813
22785
neverType as Type);
22814
22786
22815
22787
if (!(matchingType.flags & TypeFlags.Never)) {
0 commit comments