我正在构建一个非常基本的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());


现在一切都按预期进行。

10-05 21:01