=== tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts === declare function all(a?: number, b?: number): void; >all : (a?: number, b?: number) => void >a : number >b : number declare function weird(a?: number | string, b?: number | string): void; >weird : (a?: number | string, b?: number | string) => void >a : string | number >b : string | number declare function prefix(s: string, a?: number, b?: number): void; >prefix : (s: string, a?: number, b?: number) => void >s : string >a : number >b : number declare function rest(s: string, a?: number, b?: number, ...rest: number[]): void; >rest : (s: string, a?: number, b?: number, ...rest: number[]) => void >s : string >a : number >b : number >rest : number[] declare function normal(s: string): void; >normal : (s: string) => void >s : string declare function thunk(): string; >thunk : () => string declare function prefix2(s: string, n: number, a?: number, b?: number): void; >prefix2 : (s: string, n: number, a?: number, b?: number) => void >s : string >n : number >a : number >b : number declare var ns: number[]; >ns : number[] declare var mixed: (number | string)[]; >mixed : (string | number)[] declare var tuple: [number, string]; >tuple : [number, string] // good all(...ns) >all(...ns) : void >all : (a?: number, b?: number) => void >...ns : number >ns : number[] weird(...ns) >weird(...ns) : void >weird : (a?: string | number, b?: string | number) => void >...ns : number >ns : number[] weird(...mixed) >weird(...mixed) : void >weird : (a?: string | number, b?: string | number) => void >...mixed : string | number >mixed : (string | number)[] weird(...tuple) >weird(...tuple) : void >weird : (a?: string | number, b?: string | number) => void >...tuple : string | number >tuple : [number, string] prefix("a", ...ns) >prefix("a", ...ns) : void >prefix : (s: string, a?: number, b?: number) => void >"a" : "a" >...ns : number >ns : number[] rest("d", ...ns) >rest("d", ...ns) : void >rest : (s: string, a?: number, b?: number, ...rest: number[]) => void >"d" : "d" >...ns : number >ns : number[] // extra arguments normal("g", ...ns) >normal("g", ...ns) : void >normal : (s: string) => void >"g" : "g" >...ns : number >ns : number[] thunk(...ns) >thunk(...ns) : string >thunk : () => string >...ns : number >ns : number[] // bad all(...mixed) >all(...mixed) : void >all : (a?: number, b?: number) => void >...mixed : string | number >mixed : (string | number)[] all(...tuple) >all(...tuple) : void >all : (a?: number, b?: number) => void >...tuple : string | number >tuple : [number, string] prefix("b", ...mixed) >prefix("b", ...mixed) : void >prefix : (s: string, a?: number, b?: number) => void >"b" : "b" >...mixed : string | number >mixed : (string | number)[] prefix("c", ...tuple) >prefix("c", ...tuple) : void >prefix : (s: string, a?: number, b?: number) => void >"c" : "c" >...tuple : string | number >tuple : [number, string] rest("e", ...mixed) >rest("e", ...mixed) : void >rest : (s: string, a?: number, b?: number, ...rest: number[]) => void >"e" : "e" >...mixed : string | number >mixed : (string | number)[] rest("f", ...tuple) >rest("f", ...tuple) : void >rest : (s: string, a?: number, b?: number, ...rest: number[]) => void >"f" : "f" >...tuple : string | number >tuple : [number, string] prefix(...ns) // required parameters are required >prefix(...ns) : void >prefix : (s: string, a?: number, b?: number) => void >...ns : number >ns : number[] prefix(...mixed) >prefix(...mixed) : void >prefix : (s: string, a?: number, b?: number) => void >...mixed : string | number >mixed : (string | number)[] prefix(...tuple) >prefix(...tuple) : void >prefix : (s: string, a?: number, b?: number) => void >...tuple : string | number >tuple : [number, string] prefix2("g", ...ns); >prefix2("g", ...ns) : void >prefix2 : (s: string, n: number, a?: number, b?: number) => void >"g" : "g" >...ns : number >ns : number[]