Вот ссылка на playground typescript link
Проблема в том, что одна из сигнатур перегрузки выдает ошибку:
Overload signature is not compatible with function implementation.
Код:
function a(item: string): void;
function a(key: number, value: string): void; // Ошибка в этой строке на букве 'a'
function a(item?: string, key?: number, value?: string): void {
if (item) {
console.log(item);
} else if (key && value) {
console.log(item);
}
}
В реализации указан тип (optional string), а в перегрузке просят (number), потому компилятор и считает, что перегрузка не соответствует реализации. Вариант с объединением типов и проверкой на них компилируется:
function a(item: string): void;
function a(key: number, value: string): void;
function a(item_or_key: string | number, value?: string): void {
if (typeof item_or_key == 'string') {
console.log('item: ' + item_or_key);
} else if (typeof item_or_key == 'number' && value) {
console.log('key: ' + item_or_key + ', value: ' + value);
}
}
a('aaa');
a(12, 'ss');
Продвижение своими сайтами как стратегия роста и независимости