You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TypeScript时Redis OM fetchRepository报错问题求助

Redis OM + TypeScript 购物车开发错误解决

错误原因

你遇到的Property 'fetchRepository' does not exist on type 'typeof App'错误,本质是Redis OM客户端实例创建错误+导入导出不匹配导致的:

  1. 原app.ts中把connect()返回的Promise直接传给Client.use(),这是错误的,use()需要接收的是Redis客户端实例,而非Promise。
  2. 导出方式与导入方式不匹配,原代码用module.exports.client导出命名变量,但Schema文件用默认导入import client from '../../../../app',导致TypeScript无法识别正确的客户端类型。
  3. 滥用any类型掩盖了早期的类型错误,问题爆发时无法准确提示根源。

分步修正

1. 重构app.ts的Redis客户端创建与导出

修正后的app.ts需要正确创建Redis客户端、完成连接,再生成Redis OM的Client实例并导出:

// app.ts
import { createClient } from 'redis'
import { Client } from 'redis-om'

// 处理Redis连接地址
const redisUrl: string = process.env.REDIS_URL || 'redis://localhost:6379'
const redisClient = createClient({ url: redisUrl })

// 监听连接错误
redisClient.on('error', (err) => console.error('Redis连接异常:', err))

// 异步完成连接
(async () => {
  await redisClient.connect()
  console.log('数据库连接成功')
})()

// 创建并导出Redis OM Client实例
export const client = new Client().use(redisClient)

2. 修正Schema文件的导入与Repository初始化

调整Schema文件的导入方式,并正确处理索引创建的异步逻辑:

import { Entity, Schema } from 'redis-om'
// 改为命名导入,匹配app.ts的导出
import { client } from '../../../../app'

export default class Cart extends Entity {}

const CartSchema = new Schema(Cart, {
  item_name: { type: 'string' },
  item_Cost: { type: 'number' },
  coin_type: { type: 'string' }
})

// 现在client是有效的Redis OM Client,可正常调用fetchRepository
export const CartRepository = client.fetchRepository(CartSchema)

// 用异步函数处理索引创建,避免未完成连接就执行操作
(async () => {
  await CartRepository.createIndex()
})()

额外注意事项

  • 避免滥用any类型:TypeScript的类型检查能帮你提前发现错误,尽量给变量指定明确类型,比如为redisUrl指定string类型。
  • 拆分逻辑模块:建议把Redis连接逻辑放到单独的模块(比如redis-client.ts),避免入口文件的异步逻辑混乱,也方便其他模块复用。

内容的提问来源于stack exchange,提问作者user23424

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:45:54