@@ -16720,7 +16720,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
16720
16720
function getStringMappingType(symbol: Symbol, type: Type): Type {
16721
16721
return type.flags & (TypeFlags.Union | TypeFlags.Never) ? mapType(type, t => getStringMappingType(symbol, t)) :
16722
16722
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) :
16724
16724
// Mapping<Mapping<T>> === Mapping<T>
16725
16725
type.flags & TypeFlags.StringMapping && symbol === type.symbol ? type :
16726
16726
type.flags & (TypeFlags.Any | TypeFlags.String | TypeFlags.StringMapping) || isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) :
@@ -16739,14 +16739,23 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
16739
16739
return str;
16740
16740
}
16741
16741
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;
16743
16744
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
+ );
16748
16757
}
16749
- return [ texts, types] ;
16758
+ return getTemplateLiteralType( texts, types) ;
16750
16759
}
16751
16760
16752
16761
function getStringMappingTypeForGenericType(symbol: Symbol, type: Type): Type {
0 commit comments