Свойство «прототип» не существует - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь использовать jest и макет ioredis в машинописи.

Проблема в том, что я получаю ошибку от typescript, что:

tests/__mocks__/ioredis.ts(5,9): error TS2339: Property 'prototype' does not exist on type 'Redis''

Код работает, но я хотел бы решить эту ошибку. Вот мой макет:

// tests/__mocks__/ioredis.ts
import { Redis } from 'ioredis';

const IORedis: Redis = jest.genMockFromModule<Redis>('ioredis');

IORedis.prototype.hgetall = jest.fn().mockImplementation(async (key: string) => {
    // Some mock implementation
});

module.exports = IORedis;

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Если тип, который необходимо расширить, является общим, вы можете использовать переменные типа при создании типа объединения.

interface IPrototype { prototype: any; }
type ExtendedType<A, B> = IPrototype & BasicType<A, B>;

Затем вы можете разыграть, используя

(myvar as ExtendedType<any, any>).prototype
0 голосов
/ 10 мая 2018

Идеального решения не существует.

Сначала определите интерфейс со свойством прототипа:

interface IPrototype { prototype: any; }

Использование IORedis , например, для доступа к прототипу иohter методы Redis.

(IORedis as IPrototype & Redis).prototype ...

Другой вариант может заключаться в объявлении вашего const следующим образом:

interface IPrototype { prototype: any; }
type MyRedis = Redis & IPrototype;
const IORedis: MyRedis = jest.genMockFromModule<MyRedis>('ioredis');

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...