onclose,onmessage,onerror回调重载WebSocket JavaScript

6mzjoqzu  于 4个月前  发布在  Java
关注(0)|答案(1)|浏览(54)

我正在做一个Typescript WebSocket项目,在这个项目中,客户端使用WebSocket连接到后端。所以很明显,typescript会给予关于WebSocket及其on回调函数的类型提示,比如,onclose,onmessage等。
onmessage的类型签名是(this: WebSocket, ev: MessageEvent<any>) => any(我只是直接从vscode提示中复制)。
因此,第一个参数是WebSocket类型的this,即相同的示例。第二个参数是MessageEvent类型的ev
如果我需要MessageEvent,我应该将函数传递为

ws.onmessage = function (this: WebSocket, ev: MessageEvent<any>) {
  console.log("Event", ev);
}

字符串
是的,正如上面代码的预期。
下面的代码也可以用。

ws.onmessage = function (ev: MessageEvent<any>) {
  console.log("Event", ev);
}


即使是Typescript也会被编译成JS,所以在这种情况下不可能发生任何类型的方法重载。(就像在JAVA中一样)。
onmessage如何知道将事件传递给我的函数:

  • 当有两个参数时,将其作为第二个参数。
  • 当存在一个参数时,作为第一个参数。
lkaoscv7

lkaoscv71#

这是Typescript.Typescript文档的一个功能。
第一个参数中的this会在编译时被去除。你可以使用Babel Repl来查看编译。所以onmessage回调不会知道函数是有两个还是一个参数。
注意:函数param中的this抛出错误。

相关问题