diff --git a/src/resolver.ts b/src/resolver.ts index 0823838fa2..456aefd6f8 100644 --- a/src/resolver.ts +++ b/src/resolver.ts @@ -417,6 +417,15 @@ export class Resolver extends DiagnosticEmitter { reportMode ); if (!parameterType) return null; + if (parameterType == Type.void) { + if (reportMode == ReportMode.Report) { + this.error( + DiagnosticCode.Type_0_is_illegal_in_this_context, + parameterTypeNode.range, parameterType.toString() + ); + } + return null; + } parameterTypes[i] = parameterType; } let returnTypeNode = node.returnType; diff --git a/tests/compiler/void-type-callback-param.json b/tests/compiler/void-type-callback-param.json new file mode 100644 index 0000000000..1d3032d9ea --- /dev/null +++ b/tests/compiler/void-type-callback-param.json @@ -0,0 +1,7 @@ +{ + "asc_flags": [], + "stderr": [ + "AS214: Type 'void' is illegal in this context.", + "EOF" + ] +} diff --git a/tests/compiler/void-type-callback-param.ts b/tests/compiler/void-type-callback-param.ts new file mode 100644 index 0000000000..533c766831 --- /dev/null +++ b/tests/compiler/void-type-callback-param.ts @@ -0,0 +1,7 @@ +class C1 { + then(cb: (value: T) => void): void {} +} + +new C1().then(function (): void {}); + +ERROR("EOF");