@@ -16720,7 +16720,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1672016720 function getStringMappingType(symbol: Symbol, type: Type): Type {
1672116721 return type.flags & (TypeFlags.Union | TypeFlags.Never) ? mapType(type, t => getStringMappingType(symbol, t)) :
1672216722 type.flags & TypeFlags.StringLiteral ? getStringLiteralType(applyStringMapping(symbol, (type as StringLiteralType).value)) :
16723- type.flags & TypeFlags.TemplateLiteral && !isGenericType(type) ? getTemplateLiteralType(... applyTemplateStringMapping(symbol, ( type as TemplateLiteralType).texts, (type as TemplateLiteralType).types) ) :
16723+ type.flags & TypeFlags.TemplateLiteral ? applyTemplateStringMapping(symbol, type as TemplateLiteralType) :
1672416724 // Mapping<Mapping<T>> === Mapping<T>
1672516725 type.flags & TypeFlags.StringMapping && symbol === type.symbol ? type :
1672616726 type.flags & (TypeFlags.Any | TypeFlags.String | TypeFlags.StringMapping) || isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) :
@@ -16739,14 +16739,23 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1673916739 return str;
1674016740 }
1674116741
16742- function applyTemplateStringMapping(symbol: Symbol, texts: readonly string[], types: readonly Type[]): [texts: readonly string[], types: readonly Type[]] {
16742+ function applyTemplateStringMapping(symbol: Symbol, type: TemplateLiteralType): Type {
16743+ const { texts, types } = type;
1674316744 switch (intrinsicTypeKinds.get(symbol.escapedName as string)) {
16744- case IntrinsicTypeKind.Uppercase: return [texts.map(t => t.toUpperCase()), types.map(t => getStringMappingType(symbol, t))];
16745- case IntrinsicTypeKind.Lowercase: return [texts.map(t => t.toLowerCase()), types.map(t => getStringMappingType(symbol, t))];
16746- case IntrinsicTypeKind.Capitalize: return [texts[0] === "" ? texts : [texts[0].charAt(0).toUpperCase() + texts[0].slice(1), ...texts.slice(1)], texts[0] === "" ? [getStringMappingType(symbol, types[0]), ...types.slice(1)] : types];
16747- case IntrinsicTypeKind.Uncapitalize: return [texts[0] === "" ? texts : [texts[0].charAt(0).toLowerCase() + texts[0].slice(1), ...texts.slice(1)], texts[0] === "" ? [getStringMappingType(symbol, types[0]), ...types.slice(1)] : types];
16745+ case IntrinsicTypeKind.Uppercase: return getTemplateLiteralType(texts.map(t => t.toUpperCase()), types.map(t => getStringMappingType(symbol, t)));
16746+ case IntrinsicTypeKind.Lowercase: return getTemplateLiteralType(texts.map(t => t.toLowerCase()), types.map(t => getStringMappingType(symbol, t)));
16747+ case IntrinsicTypeKind.Capitalize:
16748+ case IntrinsicTypeKind.Uncapitalize:
16749+ return texts[0] === "" && types.length
16750+ ? types.length === 1 && texts[1] === ""
16751+ ? getStringMappingType(symbol, types[0])
16752+ : getStringMappingTypeForGenericType(symbol, type)
16753+ : getTemplateLiteralType(
16754+ [applyStringMapping(symbol, texts[0]), ...texts.slice(1)],
16755+ types
16756+ );
1674816757 }
16749- return [ texts, types] ;
16758+ return getTemplateLiteralType( texts, types) ;
1675016759 }
1675116760
1675216761 function getStringMappingTypeForGenericType(symbol: Symbol, type: Type): Type {
0 commit comments