通过Typescript中的名称获取类方法的返回类型

时间:2020-07-16 17:28:10

标签: typescript sinon

我一直在努力解决这个问题。 我正在使用Sinon来模拟我的数据库,但是我想增加可用的类型信息。如果模拟每个方法,我都有可用的类型信息,但是一旦创建函数包装器,事情就会开始变得混乱。

这是交易。我有一个名为mockDatabaseMethodByName的函数,该函数具有db方法名称和返回值。它可以工作,但是我希望根据方法名称来推断返回值。

如果这样做,我将在返回类型中提供所有类型信息:

  sinon.stub("Database.prototype", "addUser").returns(...)

但是,如果我使它通用,name类型为keyof Databasetypeof Database.protoype(都尝试过),则当然没有可用的类型信息,因为Sinon没有知道将使用哪个值。

  sinon.stub("Database.prototype", name).returns(...)

所以我想做的是明确告诉Sinon函数的返回类型,但是我不能动态地做到这一点,即:

  type FooReturnType = ReturnType<Database["addUser"]>;

但是,如果我这样做,它将抱怨类型Database不能用作索引类型。

  type FooReturnType = ReturnType<Database[typeof name]>;

我的意思是,这种说法很有意义。似乎没有一个聪明的说法,但是我想知道是否有机会我可以做到这一点:

mockDatabaseMethodByName("addUser", { id: 5 }); 

并获取类型信息(例如,如果5是字符串而不是数字,则进行投诉)

0 个答案:

没有答案