Skip to content

Commit cca166b

Browse files
committed
Add missing primitive constraint cases
1 parent ba1fd1a commit cca166b

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

@@ -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

Comments
 (0)