我一直在努力解决这个问题。 我正在使用Sinon来模拟我的数据库,但是我想增加可用的类型信息。如果模拟每个方法,我都有可用的类型信息,但是一旦创建函数包装器,事情就会开始变得混乱。
这是交易。我有一个名为mockDatabaseMethodByName
的函数,该函数具有db方法名称和返回值。它可以工作,但是我希望根据方法名称来推断返回值。
如果这样做,我将在返回类型中提供所有类型信息:
sinon.stub("Database.prototype", "addUser").returns(...)
但是,如果我使它通用,name
类型为keyof Database
且typeof 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
是字符串而不是数字,则进行投诉)