Redis TypeScript中del方法的类型适配问题求助
解决TypeScript中Redis del方法的类型适配问题
直接用函数重载+分支处理就能解决这个类型不匹配的问题,具体实现如下:
// 先声明函数重载,明确支持两种参数形式 public async del(key: RedisKey): Promise<number>; public async del(keys: RedisKey[]): Promise<number>; // 函数实现 public async del(keyOrKeys: RedisKey | RedisKey[]) { // 判断参数类型,分别调用Redis对应的del写法 if (Array.isArray(keyOrKeys)) { // 数组参数用展开运算符传入,匹配del(...keys: RedisKey[])的重载 return this._redis.del(...keyOrKeys); } else { // 单个参数直接传入,匹配单个key的重载 return this._redis.del(keyOrKeys); } }
为什么原写法报错?
Redis客户端的del方法重载签名中,并没有直接接受RedisKey[] | RedisKey这种联合类型的选项。它的重载通常是:
- 接受单个
RedisKey参数 - 接受多个
RedisKey参数(比如del(key1, key2)) - 接受展开后的
RedisKey数组(del(...keys))
当你直接把联合类型的参数传给this._redis.del时,TypeScript无法自动推断应该匹配哪个重载,因此抛出TS2769错误。通过手动判断参数类型并分情况调用,就能让TS正确识别对应的重载签名。
内容的提问来源于stack exchange,提问作者Vladimir Štus
相关产品推荐
相关产品推荐

