Angular избира грешен метод за претоварване, когато създава RTCPeerConnection.createOffer

Имаме внедряване на webrtc (аудио/видео) в нашето приложение angular. Работи/работи добре почти 2 години. По-долу са версиите на библиотеката, които използваме в момента.

Проблемът е: Сега трябва да дадем малко RTCOfferOptions, когато създаваме оферта. Когато дадем опциите докато createOffer, това извежда грешка и спира компилирането. Подробностите са по-долу.

От:

connection.createOffer()
    .then((offer) => /* implemntation for offer */)
    .catch((error) => /* implemntation for error */);

До:

protected offerOption: RTCOfferOptions = <RTCOfferOptions>{offerToReceiveAudio: 1, offerToReceiveVideo: 0};
connection.createOffer(offerOption)
    .then((offer) => /* implemntation for offer */)
    .catch((error) => /* implemntation for error */);

Грешка при компилиране на Angular

Argument of type 'RTCOfferOptions' is not assignable to parameter of type 'RTCSessionDescriptionCallback'.
  Type 'RTCOfferOptions' provides no match for the signature '(sdp: RTCSessionDescription): void'

Има претоварване на метода в дефиницията на типа на webrtc. Но защо Angular взе bad one, когато добави offerOption?

interface RTCPeerConnection extends EventTarget {
...
createOffer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit>; // good one
...
// Extension: https://www.w3.org/TR/webrtc/#legacy-interface-extensions
// Deprecated!
createOffer(successCallback: RTCSessionDescriptionCallback, // bad one
   failureCallback: RTCPeerConnectionErrorCallback,
   options?: RTCOfferOptions): Promise<void>;
...
}

Може да е много специфично за нашите ъглови конфигурации (може да предостави повече, ако е необходимо), опитайте да потърсите и проверете, че някой има подобен проблем, не е бил толкова успешен.


person Ntwobike    schedule 25.06.2019    source източник
comment
можеш ли да опиташ connection.createOffer<offerOption>(offerOption)? `   -  person Francisco Santorelli    schedule 25.06.2019
comment
Не, не работи Със същата грешка + нова Expected 0 type arguments, but got 1   -  person Ntwobike    schedule 25.06.2019


Отговори (1)


Възможно е вашият код да препраща към различен RTCOfferOptions от RTCOfferOptions, посочен в d.ts на angular. Двата файла може да се отнасят за два различни интерфейса, въпреки че имат едно и също име.

Ако вашият RTCOfferOptions е несъвместим с RTCOfferOptions в d.ts файла на angular, тогава първото претоварване ще бъде пропуснато, защото не съвпада.

Продължете и ги проверете с vscode и вижте дали идват от същия файл. Това може да е резултат от използването на npm link.

person Matthias    schedule 28.06.2019