Defining Function Overloads
type TaskFn = {
(name: string, dependencies: string[]): void;
(name: string, callback: CallbackFn): void;
(name: string, dependencies: string[], callback: CallbackFn): void;
}
type TaskFn = {
(name: string, dependencies: string[]): void;
(name: string, callback: CallbackFn): void;
(name: string, dependencies: string[], callback: CallbackFn): void;
}