如何键入定义绑定此

时间:2018-02-25 23:36:50

标签: typescript kurento

我使用libraryfunction 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

1 个答案:

答案 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
})