首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >socket.io-redis类型记录错误

socket.io-redis类型记录错误
EN

Stack Overflow用户
提问于 2018-07-23 10:00:45
回答 3查看 1.8K关注 0票数 2

我试过像这样使用@types/socket.io-redis

代码语言:javascript
复制
import { Server as HttpServer } from 'http';
import socketIo, { Socket } from 'socket.io';
import redis, { RedisAdapter } from 'socket.io-redis';

export default function setupWebsocket(server: HttpServer) {
    const io = socketIo().listen(server);
    io.adapter(redis(process.env.REDIS_URL));

    const adapter: RedisAdapter = io.of('/').adapter;    // Error here
}

在这里的错误注释所在的部分,我在adapter变量的红色下划线上显示了错误:

输入“Adapter”不能指定键入“RedisAdapter”。 属性“uid”在“Adapter”类型中缺失。

有人能帮我解决这个问题吗?我对打字很陌生

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-23 10:51:40

这是正确的行为,io.of('/').adapter的类型是Adapter。您分配了接口(Adapter)的特定实现(Adapter)这一事实不会更改属性类型,因为稍后您可能会更改为Adapter的不同实现。

可能的解决方案可能是在创建之后直接分配适配器。

代码语言:javascript
复制
import { Server as HttpServer } from 'http';
import socketIo, { Socket } from 'socket.io';
import redis, { RedisAdapter } from 'socket.io-redis';

export default function setupWebsocket(server: HttpServer) {
    const io = socketIo().listen(server);
    const adapter: RedisAdapter = redis(process.env.REDIS_URL);
    io.adapter(adapter);
    //... more code here
}

其他解决方案是将其转换为所需的类型。

代码语言:javascript
复制
const adapter: RedisAdapter = io.of('/').adapter as RedisAdapter;
票数 3
EN

Stack Overflow用户

发布于 2018-07-23 10:23:13

尝试使用as进行铸造

代码语言:javascript
复制
const adapter: RedisAdapter = io.of('/').adapter as RedisAdapter;
票数 1
EN

Stack Overflow用户

发布于 2021-08-19 04:09:39

我知道这是个老问题..。但我在阅读文档之前找到了这篇文章:-)

根据v6 of @socket.io/redis-adapter的文档,您应该导入createAdapter函数来初始化适配器。

https://github.com/socketio/socket.io-redis-adapter#typescript

代码语言:javascript
复制
import { Server } from 'socket.io';
import { createAdapter } from '@socket.io/redis-adapter';
import { RedisClient } from 'redis';

const io = new Server(8080);
const pubClient = new RedisClient({ host: 'localhost', port: 6379 });
const subClient = pubClient.duplicate();

io.adapter(createAdapter(pubClient, subClient));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51476126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档