我试着像这样使用@types/socket.io-redis
:
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
}
在 Error here 注解所在的部分,我在adapter
变量上看到了红色下划线,错误如下:
类型“Adapter”不能分配给类型“RedisAdapter”。
类型“Adapter”中缺少属性“uid”。
有人能帮我解决这个问题吗?我对Typescript很陌生
4条答案
按热度按时间1aaf6o9v1#
这是正确的行为,
io.of('/').adapter
的类型是Adapter
。您为接口(Adapter
)分配了特定实现(RedisAdapter
)这一事实不会更改属性类型,因为以后您可能会更改为Adapter
的不同实现。可能的解决方案是在创建后直接分配适配器
另一种解决方案是强制转换为所需类型
bfrts1fy2#
尝试使用
as
进行铸造:pkwftd7m3#
我知道这是一个老问题...但我在阅读文档之前找到了这个帖子:-)
根据
@socket.io/redis-adapter
的v6文档,您应该导入createAdapter
函数来初始化适配器https://github.com/socketio/socket.io-redis-adapter#typescript
jxct1oxe4#
请使用此版本socket.io,此问题与socket.io@4.6的较新版本有关