Skip to content

Unable to use with Typescript and NodeNext #1346

Description

@kristianmandrup

I've been trying to use this without success in typescript with nodenext. I installed typings from @types/ioredis-mock

import { redisMock } from "ioredis-mock";
const mockSender = new RedisSender(new redisMock());
import { redisMock } from "ioredis-mock";
         ^^^^^^^^^
SyntaxError: The requested module 'ioredis-mock' does not provide an export named 'redisMock'
import Redis from "ioredis-mock";
const mockSender = new RedisSender(new Redis());
This expression is not constructable.
  Type 'typeof import("/Users/kristian/repos/agent-communication-hub/node_modules/@types/ioredis-mock/index")' has no construct signatures.

The typings includes an index.d.ts which looks as follows:

/// <reference types="node" />

import ioredis = require("ioredis");

export type RedisOptions = { data?: Record<string, unknown> } & ioredis.RedisOptions;

export type RedisClusterOptions = {
    redisOptions: Omit<
        RedisOptions,
        "port" | "host" | "path" | "sentinels" | "retryStrategy" | "enableOfflineQueue" | "readOnly"
    >;
} & ioredis.ClusterOptions;

export interface ClusterConstructor {
    new(startupNodes: ioredis.ClusterNode[], options?: RedisClusterOptions): ioredis.Cluster;
}

export interface Constructor {
    new(port: number, host: string, options: RedisOptions): ioredis.Redis;
    new(path: string, options: RedisOptions): ioredis.Redis;
    new(port: number, options: RedisOptions): ioredis.Redis;
    new(port: number, host: string): ioredis.Redis;
    new(options: RedisOptions): ioredis.Redis;
    new(port: number): ioredis.Redis;
    new(path: string): ioredis.Redis;
    new(): ioredis.Redis;
    Cluster: ClusterConstructor;
}

export const redisMock: Constructor;
export { redisMock as default };

I can see there is an old issue on this #661 (comment)

It works if I add my own ioredis.d.ts file as follows where redisMock is capitalized to RedisMock

/// <reference types="node" />

import ioredis = require("ioredis");

export type RedisOptions = {
  data?: Record<string, unknown>;
} & ioredis.RedisOptions;

export type RedisClusterOptions = {
  redisOptions: Omit<
    RedisOptions,
    | "port"
    | "host"
    | "path"
    | "sentinels"
    | "retryStrategy"
    | "enableOfflineQueue"
    | "readOnly"
  >;
} & ioredis.ClusterOptions;

export interface ClusterConstructor {
  new (
    startupNodes: ioredis.ClusterNode[],
    options?: RedisClusterOptions
  ): ioredis.Cluster;
}

export interface Constructor {
  new (port: number, host: string, options: RedisOptions): ioredis.Redis;
  new (path: string, options: RedisOptions): ioredis.Redis;
  new (port: number, options: RedisOptions): ioredis.Redis;
  new (port: number, host: string): ioredis.Redis;
  new (options: RedisOptions): ioredis.Redis;
  new (port: number): ioredis.Redis;
  new (path: string): ioredis.Redis;
  new (): ioredis.Redis;
  Cluster: ClusterConstructor;
}

export const RedisMock: Constructor;
export { RedisMock as default };

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions