@@ -219,9 +219,9 @@ function getTypeOf(element) {
219219}
220220
221221// begins writing the definition of the specified element
222- function begin ( element ) {
222+ function begin ( element , noDeclare ) {
223223 writeComment ( element . comment ) ;
224- if ( element . scope === "global" && ! options . module )
224+ if ( element . scope === "global" && ! options . module && ! noDeclare )
225225 write ( "declare " ) ;
226226}
227227
@@ -240,11 +240,12 @@ function writeFunctionSignature(element, isConstructor, isTypeDef) {
240240
241241 // parameter types
242242 if ( element . params )
243- element . params . forEach ( function ( param , i ) {
243+ element . params . forEach ( function ( param ) {
244244 var path = param . name . split ( / \. / g) ;
245245 if ( path . length === 1 )
246246 params [ param . name ] = {
247247 type : getTypeOf ( param ) ,
248+ variable : param . variable === true ,
248249 optional : param . optional === true ,
249250 defaultValue : param . defaultvalue // TODO
250251 } ;
@@ -254,8 +255,13 @@ function writeFunctionSignature(element, isConstructor, isTypeDef) {
254255
255256 var paramNames = Object . keys ( params ) ;
256257 paramNames . forEach ( function ( name , i ) {
257- var param = params [ name ] ;
258- write ( name , param . optional ? "?: " : ": " , param . type ) ;
258+ var param = params [ name ] ;
259+ var type = param . type ;
260+ if ( param . variable ) {
261+ name = "..." + name ;
262+ type = param . type . charAt ( 0 ) === "(" ? "any[]" : param . type + "[]" ;
263+ }
264+ write ( name , param . optional ? "?: " : ": " , type ) ;
259265 if ( i < paramNames . length - 1 )
260266 write ( ", " ) ;
261267 } ) ;
@@ -332,8 +338,9 @@ function notAModuleReference(ref) {
332338
333339// handles a class or class-like
334340function handleClass ( element , parent ) {
335- begin ( element ) ;
336- if ( isInterface ( element ) )
341+ var is_interface = isInterface ( element ) ;
342+ begin ( element , is_interface ) ;
343+ if ( is_interface )
337344 write ( "interface " ) ;
338345 else {
339346 if ( element . virtual )
@@ -363,7 +370,7 @@ function handleClass(element, parent) {
363370 ++ indent ;
364371
365372 // constructor
366- if ( ! isInterface ( element ) && ! element . virtual )
373+ if ( ! is_interface && ! element . virtual )
367374 handleFunction ( element , parent , true ) ;
368375
369376 // members except inner classes
@@ -467,7 +474,7 @@ function handleTypeDef(element, parent) {
467474 writeInterface ( element ) ;
468475 }
469476 } else {
470- begin ( element ) ;
477+ begin ( element , true ) ;
471478 if ( element . access )
472479 write ( element . access , " " ) ;
473480 write ( "type " , element . name , " = " ) ;
0 commit comments