Property 'get' does not exist on type 'Cache'. NestJs project

Viewed 1353

I'm trying to set up Redis caching for my nestjs-graphql project by following this official guide and this tutorial. I'm following the exact steps that are mentioned but I'm getting this error that Property 'get' does not exist on type 'Cache'.

Here's the exact code

import {User} from './user.entity'
import {Resolver, Query, ResolveField, Args, Parent, Mutation} from '@nestjs/graphql'
import { UsersService } from './users.service';
import { PostsService } from '../posts/posts.service';
import { CurrentUser } from 'src/auth/auth.resolver';
import { CACHE_MANAGER, Inject, UseGuards } from '@nestjs/common';
import { GqlAuthGuard } from 'src/auth/graphql-auth.guard';

@Resolver(of => User)
export class UsersResolver {
  constructor(
    @Inject(CACHE_MANAGER) private cacheManager: Cache,
    private usersService: UsersService,
    private postsService: PostsService,
  ) {}

  @Query()
  async getUsers() {
    const value = await this.cacheManager.get('key'); //<--- This is what gives the error
    if(value){                                        // cacheManager doesn't have a get
      console.log({                                   // but both of the mentioned tutorials 
        data: value,                                  // use the same exact property
        loadsFrom: 'redis cache'
      })
    }
    return await this.usersService.findAll();
  }
}
2 Answers

Import the Cache used in

@Inject(CACHE_MANAGER) private cacheManager: Cache

from cache-manager

import { Cache } from 'cache-manager';

There isn't much code but one thing that comes to my mind is that Nest couldn't resolve the dependency or it resolved it wrongly. I don't see any import of type Cache look at the docs you have provided (quote below) maybe it will help.

The Cache class is imported from the cache-manager, while CACHE_MANAGER token from the @nestjs/common package.

Related