我使用library的function callback
,然后(令人沮丧地)调用callback = (callback || noop).bind(this)
。在callback
中,我需要抓取this
:
kurento_utils.WebRtcPeer.WebRtcPeerSendonly(options, function (error: any) {
if ( error ) {
return on_error(error);
}
let webRTC_peer = this; // kurento_utils binds 'this' to the callback
// ^^^^ error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.
webRTC_peer.generateOffer((error: string | undefined, offer: string) => {
...
TypeScript(可以理解)对这种情况不满意,至少在启用noImplicitThis
标志时。
我不知道如何正确键入注释this
。
答案 0 :(得分:2)
您可以在函数中添加this
参数。此参数不会发送到Javscript,只是为了编译器的利益,因此它可以正确地键入this
witing函数:
kurento_utils.WebRtcPeer.WebRtcPeerSendonly(options, function (this:WebRtcPeer, error: any) {
let webRTC_peer = this; // this will be of type WebRtcPeer
}
或者如果您还控制WebRtcPeerSendonly
,您可以指定它作为参数所使用的函数将传递给它的某个this
,类型推断将适用于this
,就像任何其他参数:
class WebRtcPeer {
WebRtcPeerSendonly(options: any, fn: (this: WebRtcPeer, error: any) => void) {
}
}
new WebRtcPeer().WebRtcPeerSendonly({}, function(error){
let webRTC_peer = this; // this will be of type WebRtcPeer
})