@@ -1059,14 +1059,9 @@ namespace ts {
1059
1059
return diagnostic;
1060
1060
}
1061
1061
1062
- function errorByThrowType(location: Node | undefined, value: Type) {
1063
- let message = "Unknown";
1064
- if (value.flags & TypeFlags.ThrowType) {
1065
- value = (<ThrowType>value).value;
1066
- }
1067
- if (value.flags & TypeFlags.StringLiteral) {
1068
- message = (<StringLiteralType>value).value;
1069
- }
1062
+ function errorByThrowType(location: Node | undefined, type: Type) {
1063
+ if (type.flags & TypeFlags.ThrowType) type = (<ThrowType>type).value;
1064
+ const message = getTypeNameForErrorDisplay(type);
1070
1065
error(location, Diagnostics.Type_instantiated_results_in_a_throw_type_saying_Colon_0, message);
1071
1066
}
1072
1067
@@ -15118,6 +15113,7 @@ namespace ts {
15118
15113
function instantiateType(type: Type | undefined, mapper: TypeMapper | undefined): Type | undefined;
15119
15114
function instantiateType(type: Type | undefined, mapper: TypeMapper | undefined): Type | undefined {
15120
15115
if (!(type && mapper && couldContainTypeVariables(type))) {
15116
+ if (type && (type.flags & TypeFlags.ThrowType)) errorByThrowType(currentNode, type);
15121
15117
return type;
15122
15118
}
15123
15119
if (instantiationDepth === 50 || instantiationCount >= 5000000) {
@@ -15186,8 +15182,8 @@ namespace ts {
15186
15182
}
15187
15183
}
15188
15184
if (flags & TypeFlags.ThrowType) {
15189
- errorByThrowType(currentNode, instantiateType((<ThrowType>type).value, mapper) );
15190
- return errorType ;
15185
+ const errorMessage = instantiateType((<ThrowType>type).value, mapper);
15186
+ return createThrowType(errorMessage) ;
15191
15187
}
15192
15188
return type;
15193
15189
}
0 commit comments