В целях тестирования я хотел бы иметь возможность создавать объект, реализующий интерфейс, только с той функцией, которая необходима для моего теста, без необходимости вручную поддерживать фиктивный объект со всеми возможными свойствами. Обычно я использую одну функцию за раз, поэтому не нужно определять все остальные, но я не хочу, чтобы TS продолжал жаловаться на отсутствующие свойства.
Например, у меня есть интерфейс IFoo
:
interface IFoo {
myFunc(): string;
otherFunc(): number;
}
Я попытался создать сопоставленный тип, который присваивает jest.Mock<{}>
всем свойствам IFoo
type Mockify<T> = {
[P in keyof T]: jest.Mock<{}>
};
Называя это так:
const mockFoo: Mockify<IFoo> = {
otherFunc: {
// Mocked function behavior
}
}
Проблема этого подхода заключается в том, что TS жалуется на отсутствующее свойство myFunc
объекта, переданного в Mockify.
Я также пытался Mockify<Partial<IFoo>>
игнорировать пропущенные свойства, но тогда мое определение типа отличается от IFoo
, и некоторые другие функции, зависящие от IFoo
, жалуются.
Я мог бы также определить все свойства как опциональные, но концептуально мне это не нравится.
У меня такое чувство, что сопоставленные типы могут выполнять работу, но, возможно, у меня нет правильного подхода.
Спасибо за вашу помощь!