typescript - socket.io-redis 打字稿错误
问题描述
我尝试@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
}
在此处的错误注释所在的部分,我在adapter
带有错误的变量处得到了一个红色下划线:
类型“适配器”不可分配给类型“RedisAdapter”。
“适配器”类型中缺少属性“uid”。
谁能帮我解决这个问题?我对打字稿很陌生
解决方案
这是正确的行为,类型io.of('/').adapter
是Adapter
。事实上,您指定RedisAdapter
interface() 的特定 implementation()Adapter
不会更改属性类型,因为稍后您可能会更改为Adapter
.
可能的解决方案可能是在创建后直接分配适配器
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
}
其他解决方案是转换为所需的类型
const adapter: RedisAdapter = io.of('/').adapter as RedisAdapter;
推荐阅读
- spring-boot - 在 STS 中,引用其他我自己的简单 maven 项目不起作用,我缺少什么?
- ruby - Capistrano 3:任务中的“find ... -exec ...”命令语法
- flutter - 如何更新文档 Firestore 颤振
- c++ - 为什么将字符串变量中的数据放入字符串向量中,将每个单词放在向量中的自己的位置-C++
- python - 在 Pandas 数据框中查找最近 DateTime 的索引
- reactjs - mini-css-extract plugin with postcss throws this.getOptions is not a function
- excel - 如何使用 epplus 在 excel 数据透视表中设置字体名称和大小
- tensorflow - TensorFlow 查找并标记多个图像边界
- python - 协助输入无效的方向
- c# - 如何每次都生成一个随机数并且不重复