Использование Sinon с Typescript и интерфейсами

Скажем, у меня есть такой класс:

export class User implements Employee {
    lanId: string;
    firstName: string;
    lastName: string;
}

и такой интерфейс:

export interface Employee {
     firstName: string;
     lastName: string;
}

Затем я хочу использовать Sinon, чтобы сделать фальшивого пользователя:

user = sinon.createStubInstance(User);

Это дает ошибку как это:

Невозможно преобразовать тип 'SinonStub' в тип 'Employee'. Тип "Сотрудник" имеет необязательное свойство "firstName", которого нет в типе "SinonStub".

Кажется, что Typescript и Sinon несчастны вместе.

Есть ли способ создать SinonStub класса, который реализует интерфейс Typescript?

1 ответ

Это user объект помечен как имеющий тип "Сотрудник"? Если это так, эта ошибка имеет смысл.

sinon.createStubInstance (User) вернет объект, соответствующий интерфейсу SinonStub, который, как предупреждает компилятор, не соответствует интерфейсу Employee.

Если вы не аннотируете тип user машинопись движется вперед, предполагая, что это SinonStub, и вы не столкнетесь с проблемой. Если вы на самом деле не аннотировали его, возможно, переменная неявно подхватила аннотацию с помощью использования в другом месте.

Если это звучит странно, есть ли что-то, чего вы пытаетесь достичь, чего нет в этом вопросе?

Другие вопросы по тегам