type ProcessOptions = {
multiplier: number
}
type ProcessCallback = (current: number) => void
function process(limit: number): void;
function process(limit: number, callback: ProcessCallback): void;
function process(limit: number, options: ProcessOptions, callback: ProcessCallback): void;
function process(limit: number, optionsOrCallback?: ProcessOptions | ProcessCallback, callback?: ProcessCallback) {
let options: ProcessOptions = optionsOrCallback as ProcessOptions;
if (typeof optionsOrCallback === 'function') {
callback = optionsOrCallback;
options = {
multiplier: 1
}
}
for (let i = 0; i < limit; i++) {
callback?.(options.multiplier * i);
}
}
process(1)
process(2, current => {
console.log(current);
})
process(3, { multiplier: 2 }, current => {
console.log(current);
})