Angular выбирает неправильный метод перегрузки при создании RTCPeerConnection.createOffer

У нас есть реализация webrtc (аудио/видео) в нашем угловом приложении. Работает/работает нормально уже почти 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. Два файла могут ссылаться на два разных интерфейса, даже если они имеют одно и то же имя.

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

Идите вперед и проверьте их с помощью vscode и посмотрите, взяты ли они из одного и того же файла. Это может быть результатом использования npm link.

person Matthias    schedule 28.06.2019