【问题标题】:TypeScript and Socket.ioTypeScript 和 Socket.io
【发布时间】:2012-12-14 14:21:18
【问题描述】:

我想在我的 Typescript 项目中使用 socket.io,但我只找到了用于服务器端 typescript 的 .d.ts 文件。

这是一个很好的例子:https://github.com/soywiz/typescript-node-definitions/blob/master/socket.io.d.ts

它展示了如何将 TypeScript 与 Socket.io 结合使用。但是在客户端它使用 JavaScript。

我需要的是一个用于客户端 TypeScript 的 .d.ts 文件,它可以解决来自这一行的错误消息:

var socket=io.connect("localhost");

名称“io”在当前作用域中不存在

在哪里可以找到合适的定义文件?

【问题讨论】:

    标签: javascript node.js web socket.io typescript


    【解决方案1】:

    @types/socket.io-client中,您可以找到以下最适合客户的类型:

    const client: SocketIOClient.Socket = io('http://localhost');
    

    【讨论】:

      【解决方案2】:

      我创建了自己的 .d.ts 文件,虽然很短但效果很好:

      declare var io : {
          connect(url: string): Socket;
      };
      interface Socket {
          on(event: string, callback: (data: any) => void );
          emit(event: string, data: any);
      }
      

      这个声明文件可以导入客户端 Typescript 并且 socket.io 标准示例可以工作,这是我的 Typescript 版本:

      var socket=io.connect("localhost");
      socket.on("news",(data:any)=>alert(data));
      socket.emit("news","hello");
      

      【讨论】:

        【解决方案3】:

        现在有@types/socket.io,运行安装即可:

        npm i --save @types/socket.io

        【讨论】:

        • 对于客户端:npm i --save @types/socket.io-client
        • @sintetico82 上面所说的很可靠:npm i --save-dev @types/socket.io-client(如果您的 HTML 将从 SocketIO 服务器加载 JavaScript 有效负载,save-dev 可以),然后在您的 TypeScript 代码中const socket=io(); 将自动输入:const socket: SocketIOClient.Socket.
        • 注意: @types/socket.io-client 是一个存根类型定义。 socket.io-client 提供了自己的类型定义,所以你不需要安装它。
        【解决方案4】:

        您应该在客户端使用socket.io-clientd.ts 文件,而在服务器上使用socket.iod.ts 文件。

        【讨论】:

          猜你喜欢
          • 2022-10-14
          • 2020-10-22
          • 2022-06-30
          • 2012-11-16
          • 1970-01-01
          • 2017-04-10
          • 2016-04-26
          • 2023-03-28
          • 1970-01-01
          相关资源
          最近更新 更多