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');
});
}
将 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');
});
}