【问题标题】:How do you correctly construct and use a buffer for a socket?您如何正确构造和使用套接字的缓冲区?
【发布时间】:2014-01-21 19:38:00
【问题描述】:

我正在尝试将一段代码转换为 TypeScript,但我遇到了与 UDP 套接字一起使用的 Buffer 的问题。

我正在使用的代码如下所示:

/// <reference path="../node_modules/DefinitelyTyped/node/node.d.ts" />
import dgram = require( "dgram" );

var udpServer:dgram.Socket = dgram.createSocket( "udp4" );

var message = new Buffer( "foo" );
udpServer.send( message, 0, message.length, 1337, "255.255.255.255" );

WebStorm 抱怨 message 错误为 Argument type Buffer is not assignable to argument type NodeBuffer

我知道这是因为Socket.send() 需要NodeBuffer 作为第一个参数,而我提供了Buffer。但是我该如何克服呢?

我不能使用NodeBuffer 作为message 的类型,这只会导致不同的错误。

var message:NodeBuffer = new Buffer( "foo" );

会导致Initializer type Buffer is not assignable to variable type NodeBuffer

var message:NodeBuffer = new NodeBuffer( "foo" );

会导向Argument types do not match parameters

这让我很困惑,因为 http://nodejs.org/api/dgram.html 给出的示例在纯 JavaScript 中对我有用。

那么,我该如何正确地构造一个可以通过我的 UDP 套接字发送的缓冲区?

【问题讨论】:

  • 您的node.d.ts 是最新的吗?它应该有类似 github.com/borisyankov/DefinitelyTyped/blob/… 的这些行定义 new Buffer 返回一个 NodeBuffer?
  • @loganfsmyth 是的,我昨天直接从 GitHub 克隆了它。我也看到了那个声明,它让我对 IDE 中的投诉更加困惑。
  • @loganfsmyth:我猜这是 WebStorm 中的一个错误,因为代码 编译 就好了。我将其报告为WEB-10488

标签: node.js typescript webstorm definitelytyped


【解决方案1】:

问题是由于在 WebStorm 的 JavaScript 设置中启用了 Node.js v0.8.16 Core Modules 库引起的。

这让 WebStorm 混淆了 Buffer 实际上是哪种类型。禁用库将解决错误提示。

遗憾的是,这对我们来说并不是一个真正的选择,因为该项目同时使用 Node.js 和 JavaScript TypeScript 代码。但至少我现在知道问题出在哪里了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2018-05-07
    相关资源
    最近更新 更多