我正在构建一个非常基本的IRC bot,并使用原始套接字连接到IRC服务器。我最初用纯Javascript编写了该机器人,并在TypeScript中对其进行了重做,但是在通过TLS连接时遇到了一个奇怪的问题(在非安全连接上都可以正常工作)。我的机器人的源代码位于on Bitbucket中,我遇到的具体问题是here:
[...]
this.client = this.tlsEnabled
// @ts-ignore
? new TLSSocket()
: new Socket();
this.client.connect(this.port, this.host, () => {
this.sendInitialConnectionMessages();
});
[...]
如果我没有
@ts-ignore
行,则VS Code和tsc
抱怨new TLSSocket()
调用:预期1-2个参数,但得到0。未提供'socket'的参数。
实际上,类型定义表示它至少需要一个
socket
参数。但是,如果我通过
new TLSSocket(new Socket())
或const socket = new Socket()
和new TLSSocket(socket)
提供该脚本,则脚本将立即退出,而无需单击this.client.connect()
调用。如果我告诉tsc
忽略缺少上述TLSSocket()
的参数,则一切正常,并且bot通过TLS成功连接到服务器!我以为我在这里做些愚蠢的事情,但是我不确定是什么。任何帮助表示赞赏!
最佳答案
解决了!经过大量搜索和查找示例之后,我将连接功能从最初问题中的内容重写为:
this.client = this.tlsEnabled
? tls.connect({host: this.host, port: this.port}, () => this.sendInitialConnectionMessages())
: net.connect({host: this.host, port: this.port}, () => this.sendInitialConnectionMessages());
现在一切都按预期进行。