@@ -738,7 +738,9 @@ export class Resolver extends DiagnosticEmitter {
738738 ctxFlow ,
739739 reportMode ,
740740 ) ;
741-
741+ if ( ! resolvedTypeArguments ) {
742+ return null ;
743+ }
742744 return this . resolveFunction (
743745 prototype ,
744746 resolvedTypeArguments ,
@@ -778,16 +780,24 @@ export class Resolver extends DiagnosticEmitter {
778780 let numParameters = parameterNodes . length ;
779781
780782 let argumentNodes : Expression [ ] ;
783+ let argumentsRange : Range ;
781784 switch ( node . kind ) {
782- case NodeKind . Call :
783- argumentNodes = ( < CallExpression > node ) . args ;
785+ case NodeKind . Call : {
786+ const expr = node as CallExpression ;
787+ argumentNodes = expr . args ;
788+ argumentsRange = expr . argumentsRange ;
784789 break ;
785- case NodeKind . New :
786- argumentNodes = ( < NewExpression > node ) . args ;
790+ }
791+ case NodeKind . New : {
792+ const expr = node as NewExpression ;
793+ argumentNodes = expr . args ;
794+ argumentsRange = expr . argumentsRange ;
787795 break ;
788- default :
796+ }
797+ default : {
789798 assert ( false ) ;
790799 return null ;
800+ }
791801 }
792802
793803 let numArguments = argumentNodes . length ;
@@ -802,12 +812,20 @@ export class Resolver extends DiagnosticEmitter {
802812 if ( parameterNodes [ i ] . parameterKind == ParameterKind . Optional ) {
803813 continue ;
804814 }
805- // missing initializer -> too few arguments
806815 if ( reportMode == ReportMode . Report ) {
807- this . error (
808- DiagnosticCode . Expected_0_arguments_but_got_1 ,
809- node . range , numParameters . toString ( ) , numArguments . toString ( )
810- ) ;
816+ if ( parameterNodes [ i ] . parameterKind == ParameterKind . Rest ) {
817+ // rest params are optional, but one element is needed for type inference
818+ this . error (
819+ DiagnosticCode . Type_argument_expected ,
820+ argumentsRange . atEnd
821+ ) ;
822+ } else {
823+ // missing initializer -> too few arguments
824+ this . error (
825+ DiagnosticCode . Expected_0_arguments_but_got_1 ,
826+ node . range , numParameters . toString ( ) , numArguments . toString ( )
827+ ) ;
828+ }
811829 }
812830 return null ;
813831 }
0 commit comments