=== tests/cases/compiler/genericFunctionsWithOptionalParameters1.ts === interface Utils { >Utils : Utils fold(c?: Array, folder?: (s: S, t: T) => T, init?: S): T; >fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T >T : T >S : S >c : T[] >Array : T[] >T : T >folder : (s: S, t: T) => T >s : S >S : S >t : T >T : T >T : T >init : S >S : S >T : T } var utils: Utils; >utils : Utils >Utils : Utils utils.fold(); // no error >utils.fold() : {} >utils.fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T >utils : Utils >fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T utils.fold(null); // no error >utils.fold(null) : {} >utils.fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T >utils : Utils >fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T >null : null utils.fold(null, null); // no error >utils.fold(null, null) : {} >utils.fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T >utils : Utils >fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T >null : null >null : null utils.fold(null, null, null); // no error >utils.fold(null, null, null) : {} >utils.fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T >utils : Utils >fold : (c?: T[], folder?: (s: S, t: T) => T, init?: S) => T >null : null >null : null >null : null