我正在做一个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
如何知道将事件传递给我的函数:
- 当有两个参数时,将其作为第二个参数。
- 当存在一个参数时,作为第一个参数。
1条答案
按热度按时间lkaoscv71#
这是Typescript.Typescript文档的一个功能。
第一个参数中的
this
会在编译时被去除。你可以使用Babel Repl来查看编译。所以onmessage回调不会知道函数是有两个还是一个参数。注意:函数param中的
this
抛出错误。