socket.io-redis打字稿错误
socket.io-redis Typescript error
我试过像这样使用 @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
变量处有一条红色下划线,错误为:
Type 'Adapter' is not assignable to type 'RedisAdapter'.
Property 'uid' is missing in type 'Adapter'.
谁能帮我解决这个问题?我对 Typescript 很陌生
尝试使用 as
投射:
const adapter: RedisAdapter = io.of('/').adapter as RedisAdapter;
这是正确的行为,io.of('/').adapter
的类型是 Adapter
。事实上,您分配了接口(Adapter
)的特定实现(RedisAdapter
)不要更改 属性 类型,因为稍后您可能会更改为 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;
我意识到这是一个老问题...但我在阅读文档之前发现了这个 post:-)
根据 @socket.io/redis-adapter
的 v6 文档,您应该导入 createAdapter
函数来初始化适配器
https://github.com/socketio/socket.io-redis-adapter#typescript
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));
我试过像这样使用 @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
变量处有一条红色下划线,错误为:
Type 'Adapter' is not assignable to type 'RedisAdapter'.
Property 'uid' is missing in type 'Adapter'.
谁能帮我解决这个问题?我对 Typescript 很陌生
尝试使用 as
投射:
const adapter: RedisAdapter = io.of('/').adapter as RedisAdapter;
这是正确的行为,io.of('/').adapter
的类型是 Adapter
。事实上,您分配了接口(Adapter
)的特定实现(RedisAdapter
)不要更改 属性 类型,因为稍后您可能会更改为 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;
我意识到这是一个老问题...但我在阅读文档之前发现了这个 post:-)
根据 @socket.io/redis-adapter
的 v6 文档,您应该导入 createAdapter
函数来初始化适配器
https://github.com/socketio/socket.io-redis-adapter#typescript
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));