@@ -13439,12 +13439,15 @@ namespace ts {
13439
13439
let text = texts[0];
13440
13440
for (let i = 0; i < types.length; i++) {
13441
13441
const t = types[i];
13442
- if (t.flags & TypeFlags.Literal) {
13443
- const s = applyTemplateCasing(getTemplateStringForType(t) || "", casings[i]);
13442
+ const casingType = casings[i];
13443
+ const isGeneric = isGenericIndexType(t);
13444
+ const resolvable = (t.flags & TypeFlags.Literal) || (!isGeneric && casingType === TemplateCasing.TypeOf);
13445
+ if (resolvable) {
13446
+ const s = applyTemplateCasing(getTemplateStringForType(t, casingType) || "", casingType);
13444
13447
text += s;
13445
13448
text += texts[i + 1];
13446
13449
}
13447
- else if (isGenericIndexType(t) ) {
13450
+ else if (isGeneric ) {
13448
13451
newTypes.push(t);
13449
13452
newCasings.push(casings[i]);
13450
13453
newTexts.push(text);
@@ -13466,7 +13469,10 @@ namespace ts {
13466
13469
return type;
13467
13470
}
13468
13471
13469
- function getTemplateStringForType(type: Type) {
13472
+ function getTemplateStringForType(type: Type, casing: TemplateCasing) {
13473
+ if (casing === TemplateCasing.TypeOf) {
13474
+ return getTypeNameForErrorDisplay(type);
13475
+ }
13470
13476
return type.flags & TypeFlags.StringLiteral ? (<StringLiteralType>type).value :
13471
13477
type.flags & TypeFlags.NumberLiteral ? "" + (<NumberLiteralType>type).value :
13472
13478
type.flags & TypeFlags.BigIntLiteral ? pseudoBigIntToString((<BigIntLiteralType>type).value) :
@@ -31424,7 +31430,9 @@ namespace ts {
31424
31430
getTypeFromTypeNode(node);
31425
31431
for (const span of node.templateSpans) {
31426
31432
const type = getTypeFromTypeNode(span.type);
31427
- checkTypeAssignableTo(type, templateConstraintType, span.type);
31433
+ if (span.casing !== TemplateCasing.TypeOf) {
31434
+ checkTypeAssignableTo(type, templateConstraintType, span.type);
31435
+ }
31428
31436
if (!everyType(type, t => !!(t.flags & TypeFlags.Literal) || isGenericIndexType(t))) {
31429
31437
error(span.type, Diagnostics.Template_type_argument_0_is_not_literal_type_or_a_generic_type, typeToString(type));
31430
31438
}
0 commit comments