@@ -114,18 +114,29 @@ namespace ts.codefix {
114114
115115 newSignatureDeclaration . parameters = createNodeArray < ParameterDeclaration > ( ) ;
116116 for ( let i = 0 ; i < maxArgs - 1 ; i ++ ) {
117- const newParameter = createParameterDeclaration ( i , minArgumentCount , newSignatureDeclaration ) ;
117+ const newParameter = createParameterDeclaration ( i , minArgumentCount , anyTypeNode , newSignatureDeclaration ) ;
118118 newSignatureDeclaration . parameters . push ( newParameter ) ;
119119 }
120120
121- const lastParameter = createParameterDeclaration ( maxArgs - 1 , minArgumentCount , newSignatureDeclaration ) ;
121+ let lastParameter : ParameterDeclaration ;
122122 if ( hasRestParameter ) {
123- lastParameter . dotDotDotToken = createToken ( SyntaxKind . DotDotDotToken ) ;
123+
124+ const anyArrayTypeNode = createNode ( SyntaxKind . ArrayType ) as ArrayTypeNode ;
125+ anyArrayTypeNode . elementType = anyTypeNode ;
124126
125127 if ( ! allMaxArgsAreRest ) {
126- const newParameter = createParameterDeclaration ( maxArgs - 1 , minArgumentCount , newSignatureDeclaration ) ;
128+ const newParameter = createParameterDeclaration ( maxArgs - 1 , minArgumentCount , anyTypeNode , newSignatureDeclaration ) ;
127129 newSignatureDeclaration . parameters . push ( newParameter ) ;
130+ lastParameter = createParameterDeclaration ( maxArgs , minArgumentCount , anyArrayTypeNode , newSignatureDeclaration ) ;
131+ }
132+ else {
133+ lastParameter = createParameterDeclaration ( maxArgs - 1 , minArgumentCount , anyArrayTypeNode , newSignatureDeclaration ) ;
128134 }
135+
136+ lastParameter . dotDotDotToken = createToken ( SyntaxKind . DotDotDotToken ) ;
137+ }
138+ else {
139+ lastParameter = createParameterDeclaration ( maxArgs - 1 , minArgumentCount , anyTypeNode , newSignatureDeclaration ) ;
129140 }
130141
131142 newSignatureDeclaration . parameters . push ( lastParameter ) ;
@@ -135,12 +146,12 @@ namespace ts.codefix {
135146
136147 return checker . getSignatureFromDeclaration ( newSignatureDeclaration ) ;
137148
138- function createParameterDeclaration ( index : number , minArgCount : number , enclosingSignatureDeclaration : SignatureDeclaration ) : ParameterDeclaration {
149+ function createParameterDeclaration ( index : number , minArgCount : number , typeNode : TypeNode , enclosingSignatureDeclaration : SignatureDeclaration ) : ParameterDeclaration {
139150 const newParameter = createNode ( SyntaxKind . Parameter ) as ParameterDeclaration ;
140151 newParameter . symbol = checker . createSymbol ( SymbolFlags . FunctionScopedVariable , "arg" + index ) ;
141152 newParameter . symbol . valueDeclaration = newParameter ;
142153 newParameter . symbol . declarations = [ newParameter ] ;
143- newParameter . type = anyTypeNode ;
154+ newParameter . type = typeNode ;
144155 newParameter . parent = enclosingSignatureDeclaration ;
145156 if ( index >= minArgCount ) {
146157 newParameter . questionToken = optionalToken ;
0 commit comments