Promises with typescript-2.x gives error :Cannot invoke an expression whose type lacks a call signature

Promises with typescript-2.x gives error :Cannot invoke an expression whose type lacks a call signature

将 angular 从 2.x 升级到 4.x 并将 typescript 升级到 2.x 后开始出现以下错误,该错误在以前的版本中运行良好

Cannot invoke an expression whose type lacks a call signature. Type '((onfulfilled?: (value: MediaStream) => TResult1 | Prom...' has no compatible call signatures.

我的代码如下

getMediaStream(options:{video: boolean, audio: boolean}) {
    let self: Caller = this;
    return self.getUserMedia(options)
      .then(stream => {
        console.log('got our media stream:', stream);
        self.privateMedia = createObjectURL(stream);
        self.privateStream = stream;
        return stream;
      })
      .catch(() => {
        console.log('Could not get access to microphone & camera');
      });
  }

  public getUserMedia(constraints) {
    if (window.navigator.mediaDevices && window.navigator.mediaDevices.getUserMedia) {
      return window.navigator.mediaDevices.getUserMedia(constraints);
    }

    return new Promise((resolve, reject) => {
      const getMedia = window.navigator.getUserMedia;
      if (!getMedia) reject(new Error('Browser unsupported'));
      getMedia.call(navigator, constraints, resolve, reject);
    });
  }

self.getUserMedia(options) 类型转换为 any/Promise 解决了问题。

所以我使用了以下代码并且有效:

getMediaStream(options:{video: boolean, audio: boolean}) {
    let self = this;
    return (<Promise>self.getUserMedia(options))// in place of promise 'any' or other any superclass to promise will work as well 
      .then(stream => {
        console.log('got our media stream:', stream);
        self.privateMedia = createObjectURL(stream);
        self.privateStream = stream;
        return stream;
      }).catch(() => {
        console.log('Could not get access to microphone & camera');
      });
  }