【问题标题】:Using Sinon with Typescript and interfaces使用带有 Typescript 和接口的 Sinon
【发布时间】:2016-04-20 22:20:03
【问题描述】:

假设我有这样的课程:

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”。类型“Employee”具有非可选属性“firstName”,该属性在类型“SinonStub”上不存在。

Typescript 和诗乃好像在一起不开心。

有没有办法创建一个实现 Typescript 接口的类的 SinonStub?

【问题讨论】:

  • 你的用户类定义中有一个冒号,我猜这是一个错字?
  • @Paarth - 我修好了。这是一个错字。

标签: javascript interface typescript sinon


【解决方案1】:

user 对象是否标记为“员工”类型?如果是这样,这个错误是有道理的。

sinon.createStubInstance(User) 将返回一个满足SinonStub 接口的对象,编译器警告它不符合Employee 接口。

如果你不注释 user 的类型,打字稿会继续前进,假设它是一个 SinonStub,你就不会遇到问题。如果您实际上没有对其进行注释,则该变量可能通过在其他地方的使用隐式地获取了注释。

如果这听起来不对,那么您是否正在尝试完成一些不在问题中的事情?

【讨论】:

  • 当您说“如果您不注释用户类型”时,我并没有完全关注您。我怎样才能做到这一点?真的,我正在寻找一种无需删除 Employee 接口即可创建用户存根的方法。 (如果可能的话)
  • user 变量是如何声明的?
  • let user = sinon.createStubInstance(User);
  • 您以后是否在需要员工的位置使用用户变量?我已经输入了那个代码,它对我来说很好用。你里面一定有我没有的东西。
猜你喜欢
  • 2019-11-29
  • 2018-06-25
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 2020-03-24
  • 1970-01-01
  • 2022-12-18
相关资源
最近更新 更多