如何键入定义绑定 this
How to type define a bound this
我正在使用一个 library with a 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
。
您可以向函数添加一个 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
})
我正在使用一个 library with a 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
。
您可以向函数添加一个 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
})