Skip to content

Commit 67d7ce5

Browse files
committed
Add missing primitive constraint cases
1 parent 06685cb commit 67d7ce5

File tree

6 files changed

+2048
-740
lines changed

6 files changed

+2048
-740
lines changed

src/compiler/checker.ts

+12-7
Original file line numberDiff line numberDiff line change
@@ -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

@@ -22745,15 +22745,18 @@ namespace ts {
2274522745

2274622746
function getTemplateTypePlaceholderPriority(type: Type) {
2274722747
return type.flags & TypeFlags.String ? TemplateTypePlaceholderPriority.String :
22748+
type.flags & TypeFlags.TemplateLiteral ? TemplateTypePlaceholderPriority.TemplateLiterals :
22749+
type.flags & TypeFlags.StringMapping ? TemplateTypePlaceholderPriority.StringLiterals :
2274822750
type.flags & TypeFlags.StringLiteral ? TemplateTypePlaceholderPriority.StringLiterals :
2274922751
type.flags & TypeFlags.Number ? TemplateTypePlaceholderPriority.Number :
22752+
type.flags & TypeFlags.Enum ? TemplateTypePlaceholderPriority.Enums :
2275022753
type.flags & TypeFlags.NumberLiteral ? TemplateTypePlaceholderPriority.NumberLiterals :
2275122754
type.flags & TypeFlags.BigInt ? TemplateTypePlaceholderPriority.BigInt :
2275222755
type.flags & TypeFlags.BigIntLiteral ? TemplateTypePlaceholderPriority.BigIntLiterals :
2275322756
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 :
2275722760
TemplateTypePlaceholderPriority.Never;
2275822761
}
2275922762

@@ -22797,7 +22800,9 @@ namespace ts {
2279722800
const matchingType = reduceType(constraint, (matchingType, t) =>
2279822801
!(t.flags & allTypeFlags) || getTemplateTypePlaceholderPriority(t) <= getTemplateTypePlaceholderPriority(matchingType) ? matchingType :
2279922802
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.
2280122806
t.flags & TypeFlags.BigInt ? parseBigIntLiteralType(str) : // if `str` was not a valid bigint, TypeFlags.BigInt would have been excluded above.
2280222807
t.flags & TypeFlags.Boolean ? str === "true" ? trueType : falseType :
2280322808
t.flags & TypeFlags.StringLiteral && (t as StringLiteralType).value === str ? t :

0 commit comments

Comments
 (0)