// @strict: true type Func1 = (x: T) => void; type Func2 = ((x: T) => void) | undefined; declare let f1: Func1; declare let f2: Func1<"a">; declare function foo(f1: Func1, f2: Func1): void; foo(f1, f2); declare let g1: Func2; declare let g2: Func2<"a">; declare function bar(g1: Func2, g2: Func2): void; bar(f1, f2); bar(g1, g2);