Skip to content

Commit a08c7cb

Browse files
authored
Emit an error instead of aborting when inferring unused type parameters (#766)
1 parent 4a4cea5 commit a08c7cb

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/compiler.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5868,8 +5868,21 @@ export class Compiler extends DiagnosticEmitter {
58685868
}
58695869
let resolvedTypeArguments = new Array<Type>(numTypeParameters);
58705870
for (let i = 0; i < numTypeParameters; ++i) {
5871-
let inferredType = assert(inferredTypes.get(typeParameterNodes[i].name.text)); // TODO
5872-
resolvedTypeArguments[i] = inferredType;
5871+
let name = typeParameterNodes[i].name.text;
5872+
if (inferredTypes.has(name)) {
5873+
let inferredType = inferredTypes.get(name);
5874+
if (inferredType) {
5875+
resolvedTypeArguments[i] = inferredType;
5876+
continue;
5877+
}
5878+
}
5879+
// unused template, e.g. `function test<T>(): void {...}` called as `test()`
5880+
// invalid because the type is effectively unknown inside the function body
5881+
this.error(
5882+
DiagnosticCode.Type_argument_expected,
5883+
expression.expression.range.atEnd
5884+
);
5885+
return this.module.unreachable();
58735886
}
58745887
instance = this.resolver.resolveFunction(
58755888
prototype,

0 commit comments

Comments
 (0)