@@ -692,7 +692,7 @@ namespace ts {
692
692
const intersectionTypes = new Map<string, Type>();
693
693
const literalTypes = new Map<string, LiteralType>();
694
694
const indexedAccessTypes = new Map<string, IndexedAccessType>();
695
- const templateTypes = new Map<string, TemplateType >();
695
+ const templateLiteralTypes = new Map<string, TemplateLiteralType >();
696
696
const substitutionTypes = new Map<string, SubstitutionType>();
697
697
const evolvingArrayTypes: EvolvingArrayType[] = [];
698
698
const undefinedProperties: SymbolTable = new Map();
@@ -4460,10 +4460,10 @@ namespace ts {
4460
4460
const indexTypeNode = typeToTypeNodeHelper(indexedType, context);
4461
4461
return factory.createTypeOperatorNode(SyntaxKind.KeyOfKeyword, indexTypeNode);
4462
4462
}
4463
- if (type.flags & TypeFlags.Template ) {
4464
- const texts = (<TemplateType >type).texts;
4465
- const casings = (<TemplateType >type).casings;
4466
- const types = (<TemplateType >type).types;
4463
+ if (type.flags & TypeFlags.TemplateLiteral ) {
4464
+ const texts = (<TemplateLiteralType >type).texts;
4465
+ const casings = (<TemplateLiteralType >type).casings;
4466
+ const types = (<TemplateLiteralType >type).types;
4467
4467
const templateHead = factory.createTemplateHead(texts[0]);
4468
4468
const templateSpans = factory.createNodeArray(
4469
4469
map(types, (t, i) => factory.createTemplateTypeSpan(
@@ -10767,7 +10767,7 @@ namespace ts {
10767
10767
}
10768
10768
10769
10769
function getBaseConstraintOfType(type: Type): Type | undefined {
10770
- if (type.flags & (TypeFlags.InstantiableNonPrimitive | TypeFlags.UnionOrIntersection | TypeFlags.Template )) {
10770
+ if (type.flags & (TypeFlags.InstantiableNonPrimitive | TypeFlags.UnionOrIntersection | TypeFlags.TemplateLiteral )) {
10771
10771
const constraint = getResolvedBaseConstraint(<InstantiableType | UnionOrIntersectionType>type);
10772
10772
return constraint !== noConstraintType && constraint !== circularConstraintType ? constraint : undefined;
10773
10773
}
@@ -10861,10 +10861,10 @@ namespace ts {
10861
10861
if (t.flags & TypeFlags.Index) {
10862
10862
return keyofConstraintType;
10863
10863
}
10864
- if (t.flags & TypeFlags.Template ) {
10865
- const types = (<TemplateType >t).types;
10864
+ if (t.flags & TypeFlags.TemplateLiteral ) {
10865
+ const types = (<TemplateLiteralType >t).types;
10866
10866
const constraints = mapDefined(types, getBaseConstraint);
10867
- return constraints.length === types.length ? getTemplateType ((<TemplateType >t).texts, (<TemplateType >t).casings, constraints) : stringType;
10867
+ return constraints.length === types.length ? getTemplateLiteralType ((<TemplateLiteralType >t).texts, (<TemplateLiteralType >t).casings, constraints) : stringType;
10868
10868
}
10869
10869
if (t.flags & TypeFlags.IndexedAccess) {
10870
10870
const baseObjectType = getBaseConstraint((<IndexedAccessType>t).objectType);
@@ -13401,19 +13401,19 @@ namespace ts {
13401
13401
function getTypeFromTemplateTypeNode(node: TemplateTypeNode) {
13402
13402
const links = getNodeLinks(node);
13403
13403
if (!links.resolvedType) {
13404
- links.resolvedType = getTemplateType (
13404
+ links.resolvedType = getTemplateLiteralType (
13405
13405
[node.head.text, ...map(node.templateSpans, span => span.literal.text)],
13406
13406
map(node.templateSpans, span => span.casing),
13407
13407
map(node.templateSpans, span => getTypeFromTypeNode(span.type)));
13408
13408
}
13409
13409
return links.resolvedType;
13410
13410
}
13411
13411
13412
- function getTemplateType (texts: readonly string[], casings: readonly TemplateCasing[], types: readonly Type[]): Type {
13412
+ function getTemplateLiteralType (texts: readonly string[], casings: readonly TemplateCasing[], types: readonly Type[]): Type {
13413
13413
const unionIndex = findIndex(types, t => !!(t.flags & (TypeFlags.Never | TypeFlags.Union)));
13414
13414
if (unionIndex >= 0) {
13415
13415
return checkCrossProductUnion(types) ?
13416
- mapType(types[unionIndex], t => getTemplateType (texts, casings, replaceElement(types, unionIndex, t))) :
13416
+ mapType(types[unionIndex], t => getTemplateLiteralType (texts, casings, replaceElement(types, unionIndex, t))) :
13417
13417
errorType;
13418
13418
}
13419
13419
const newTypes = [];
@@ -13442,9 +13442,9 @@ namespace ts {
13442
13442
}
13443
13443
newTexts.push(text);
13444
13444
const id = `${getTypeListId(newTypes)}|${newCasings.join(",")}|${map(newTexts, t => t.length).join(",")}|${newTexts.join("")}`;
13445
- let type = templateTypes .get(id);
13445
+ let type = templateLiteralTypes .get(id);
13446
13446
if (!type) {
13447
- templateTypes .set(id, type = createTemplateType (newTexts, newCasings, newTypes));
13447
+ templateLiteralTypes .set(id, type = createTemplateLiteralType (newTexts, newCasings, newTypes));
13448
13448
}
13449
13449
return type;
13450
13450
}
@@ -13467,8 +13467,8 @@ namespace ts {
13467
13467
return str;
13468
13468
}
13469
13469
13470
- function createTemplateType (texts: readonly string[], casings: readonly TemplateCasing[], types: readonly Type[]) {
13471
- const type = <TemplateType >createType(TypeFlags.Template );
13470
+ function createTemplateLiteralType (texts: readonly string[], casings: readonly TemplateCasing[], types: readonly Type[]) {
13471
+ const type = <TemplateLiteralType >createType(TypeFlags.TemplateLiteral );
13472
13472
type.texts = texts;
13473
13473
type.casings = casings;
13474
13474
type.types = types;
@@ -13707,7 +13707,7 @@ namespace ts {
13707
13707
}
13708
13708
return !!((<UnionOrIntersectionType>type).objectFlags & ObjectFlags.IsGenericIndexType);
13709
13709
}
13710
- return !!(type.flags & (TypeFlags.InstantiableNonPrimitive | TypeFlags.Index | TypeFlags.Template ));
13710
+ return !!(type.flags & (TypeFlags.InstantiableNonPrimitive | TypeFlags.Index | TypeFlags.TemplateLiteral ));
13711
13711
}
13712
13712
13713
13713
function isThisTypeParameter(type: Type): boolean {
@@ -14205,7 +14205,7 @@ namespace ts {
14205
14205
}
14206
14206
14207
14207
function isEmptyObjectTypeOrSpreadsIntoEmptyObject(type: Type) {
14208
- return isEmptyObjectType(type) || !!(type.flags & (TypeFlags.Null | TypeFlags.Undefined | TypeFlags.BooleanLike | TypeFlags.NumberLike | TypeFlags.BigIntLike | TypeFlags.StringLike | TypeFlags.EnumLike | TypeFlags.NonPrimitive | TypeFlags.Index | TypeFlags.Template ));
14208
+ return isEmptyObjectType(type) || !!(type.flags & (TypeFlags.Null | TypeFlags.Undefined | TypeFlags.BooleanLike | TypeFlags.NumberLike | TypeFlags.BigIntLike | TypeFlags.StringLike | TypeFlags.EnumLike | TypeFlags.NonPrimitive | TypeFlags.Index | TypeFlags.TemplateLiteral ));
14209
14209
}
14210
14210
14211
14211
function isSinglePropertyAnonymousObjectType(type: Type) {
@@ -14291,7 +14291,7 @@ namespace ts {
14291
14291
}
14292
14292
return mapType(right, t => getSpreadType(left, t, symbol, objectFlags, readonly));
14293
14293
}
14294
- if (right.flags & (TypeFlags.BooleanLike | TypeFlags.NumberLike | TypeFlags.BigIntLike | TypeFlags.StringLike | TypeFlags.EnumLike | TypeFlags.NonPrimitive | TypeFlags.Index | TypeFlags.Template )) {
14294
+ if (right.flags & (TypeFlags.BooleanLike | TypeFlags.NumberLike | TypeFlags.BigIntLike | TypeFlags.StringLike | TypeFlags.EnumLike | TypeFlags.NonPrimitive | TypeFlags.Index | TypeFlags.TemplateLiteral )) {
14295
14295
return left;
14296
14296
}
14297
14297
@@ -15091,8 +15091,8 @@ namespace ts {
15091
15091
if (flags & TypeFlags.Index) {
15092
15092
return getIndexType(instantiateType((<IndexType>type).type, mapper));
15093
15093
}
15094
- if (flags & TypeFlags.Template ) {
15095
- return getTemplateType ((<TemplateType >type).texts, (<TemplateType >type).casings, instantiateTypes((<TemplateType >type).types, mapper));
15094
+ if (flags & TypeFlags.TemplateLiteral ) {
15095
+ return getTemplateLiteralType ((<TemplateLiteralType >type).texts, (<TemplateLiteralType >type).casings, instantiateTypes((<TemplateLiteralType >type).types, mapper));
15096
15096
}
15097
15097
if (flags & TypeFlags.IndexedAccess) {
15098
15098
return getIndexedAccessType(instantiateType((<IndexedAccessType>type).objectType, mapper), instantiateType((<IndexedAccessType>type).indexType, mapper), /*accessNode*/ undefined, type.aliasSymbol, instantiateTypes(type.aliasTypeArguments, mapper));
@@ -17220,7 +17220,7 @@ namespace ts {
17220
17220
return result;
17221
17221
}
17222
17222
}
17223
- else if (source.flags & TypeFlags.Template ) {
17223
+ else if (source.flags & TypeFlags.TemplateLiteral ) {
17224
17224
const constraint = getBaseConstraintOfType(source);
17225
17225
if (constraint && (result = isRelatedTo(constraint, target, reportErrors))) {
17226
17226
resetErrorInfo(saveErrorInfo);
@@ -19667,8 +19667,8 @@ namespace ts {
19667
19667
inferFromTypes(sourceType, target);
19668
19668
}
19669
19669
}
19670
- else if (target.flags & TypeFlags.Template ) {
19671
- inferToTemplateType (source, <TemplateType >target);
19670
+ else if (target.flags & TypeFlags.TemplateLiteral ) {
19671
+ inferToTemplateLiteralType (source, <TemplateLiteralType >target);
19672
19672
}
19673
19673
else {
19674
19674
source = getReducedType(source);
@@ -19948,10 +19948,10 @@ namespace ts {
19948
19948
}
19949
19949
}
19950
19950
19951
- function inferToTemplateType (source: Type, target: TemplateType ) {
19951
+ function inferToTemplateLiteralType (source: Type, target: TemplateLiteralType ) {
19952
19952
if (source.flags & (TypeFlags.StringLike | TypeFlags.Index)) {
19953
- const matches = source.flags & TypeFlags.StringLiteral ? inferLiteralsFromTemplateType (<StringLiteralType>source, target) :
19954
- source.flags & TypeFlags.Template && arraysEqual((<TemplateType >source).texts, target.texts) && arraysEqual((<TemplateType >source).casings, target.casings)? (<TemplateType >source).types :
19953
+ const matches = source.flags & TypeFlags.StringLiteral ? inferLiteralsFromTemplateLiteralType (<StringLiteralType>source, target) :
19954
+ source.flags & TypeFlags.TemplateLiteral && arraysEqual((<TemplateLiteralType >source).texts, target.texts) && arraysEqual((<TemplateLiteralType >source).casings, target.casings)? (<TemplateLiteralType >source).types :
19955
19955
undefined;
19956
19956
const types = target.types;
19957
19957
for (let i = 0; i < types.length; i++) {
@@ -19960,7 +19960,7 @@ namespace ts {
19960
19960
}
19961
19961
}
19962
19962
19963
- function inferLiteralsFromTemplateType (source: StringLiteralType, target: TemplateType ): Type[] | undefined {
19963
+ function inferLiteralsFromTemplateLiteralType (source: StringLiteralType, target: TemplateLiteralType ): Type[] | undefined {
19964
19964
const value = source.value;
19965
19965
const texts = target.texts;
19966
19966
const lastIndex = texts.length - 1;
@@ -20146,7 +20146,7 @@ namespace ts {
20146
20146
20147
20147
function hasPrimitiveConstraint(type: TypeParameter): boolean {
20148
20148
const constraint = getConstraintOfTypeParameter(type);
20149
- return !!constraint && maybeTypeOfKind(constraint.flags & TypeFlags.Conditional ? getDefaultConstraintOfConditionalType(constraint as ConditionalType) : constraint, TypeFlags.Primitive | TypeFlags.Index | TypeFlags.Template );
20149
+ return !!constraint && maybeTypeOfKind(constraint.flags & TypeFlags.Conditional ? getDefaultConstraintOfConditionalType(constraint as ConditionalType) : constraint, TypeFlags.Primitive | TypeFlags.Index | TypeFlags.TemplateLiteral );
20150
20150
}
20151
20151
20152
20152
function isObjectLiteralType(type: Type) {
@@ -26176,7 +26176,7 @@ namespace ts {
26176
26176
else {
26177
26177
const contextualType = getIndexedAccessType(restType, getLiteralType(i - index));
26178
26178
const argType = checkExpressionWithContextualType(arg, contextualType, context, checkMode);
26179
- const hasPrimitiveContextualType = maybeTypeOfKind(contextualType, TypeFlags.Primitive | TypeFlags.Index | TypeFlags.Template );
26179
+ const hasPrimitiveContextualType = maybeTypeOfKind(contextualType, TypeFlags.Primitive | TypeFlags.Index | TypeFlags.TemplateLiteral );
26180
26180
types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType));
26181
26181
flags.push(ElementFlags.Required);
26182
26182
}
@@ -29192,7 +29192,7 @@ namespace ts {
29192
29192
// and the right operand to be of type Any, an object type, or a type parameter type.
29193
29193
// The result is always of the Boolean primitive type.
29194
29194
if (!(allTypesAssignableToKind(leftType, TypeFlags.StringLike | TypeFlags.NumberLike | TypeFlags.ESSymbolLike) ||
29195
- isTypeAssignableToKind(leftType, TypeFlags.Index | TypeFlags.Template | TypeFlags.TypeParameter))) {
29195
+ isTypeAssignableToKind(leftType, TypeFlags.Index | TypeFlags.TemplateLiteral | TypeFlags.TypeParameter))) {
29196
29196
error(left, Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol);
29197
29197
}
29198
29198
if (!allTypesAssignableToKind(rightType, TypeFlags.NonPrimitive | TypeFlags.InstantiableNonPrimitive)) {
@@ -30141,7 +30141,7 @@ namespace ts {
30141
30141
}
30142
30142
// If the contextual type is a literal of a particular primitive type, we consider this a
30143
30143
// literal context for all literals of that primitive type.
30144
- return !!(contextualType.flags & (TypeFlags.StringLiteral | TypeFlags.Index | TypeFlags.Template ) && maybeTypeOfKind(candidateType, TypeFlags.StringLiteral) ||
30144
+ return !!(contextualType.flags & (TypeFlags.StringLiteral | TypeFlags.Index | TypeFlags.TemplateLiteral ) && maybeTypeOfKind(candidateType, TypeFlags.StringLiteral) ||
30145
30145
contextualType.flags & TypeFlags.NumberLiteral && maybeTypeOfKind(candidateType, TypeFlags.NumberLiteral) ||
30146
30146
contextualType.flags & TypeFlags.BigIntLiteral && maybeTypeOfKind(candidateType, TypeFlags.BigIntLiteral) ||
30147
30147
contextualType.flags & TypeFlags.BooleanLiteral && maybeTypeOfKind(candidateType, TypeFlags.BooleanLiteral) ||
0 commit comments