Как сделать такую перегрузку Typescript

205
02 августа 2017, 22:46

Вот ссылка на 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);
    }
}
Answer 1

В реализации указан тип (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');
READ ALSO
появляющийся текст на слайдере

появляющийся текст на слайдере

Есть слайдер, необходимо, чтобы текст выезжал сбоку слайдера каждый раз когда приходит очередь данного слайдаНо есть еще одна вещь текст,...

168
Не работает ajax в Magnific Popup

Не работает ajax в Magnific Popup

Собственно нужно по клику на ссылку открывать в модальном окне другую стрсайта, но ajax плагина не работает

258
Странное поведение include

Странное поведение include

Есть файл конфига, который возвращает массив значенийСодержимое:

235
Оптимальная выборка из бд

Оптимальная выборка из бд

Делаю выборку по городу, у города есть районы, у них комплексы, а у комплексов квартирыВ конечном итоге мне нужно получить квартиры для определенного...

284