我遇到了一个问题,我在一个存根函数的返回值上收到一条错误消息,它模拟了 Observable 的返回(使用rxjs-marbles
)。
我遇到的问题是错误消息似乎表明返回类型上不存在对象的属性。
从单元测试文件
it('', marbles((m) => {
stub(ambulatoryListDataManager, 'combinedMultipleSearchStatuses').returns(
m.cold('a', [
{
searchStatus: SearchStatus.active, // SearchStatus is an enum type
flags: { loaded: true, loading: false },
list: recordList,
},
{...},
]),
);
});
我收到以下类型错误:
Type '{ searchStatus: SearchStatus.active; flags: { loaded: true; loading: false; }; list: IRecord[]; }' is not assignable to type '{ searchStatus: SearchStatus; flags: ListFlagsSelection; list: IRecord[]; }[]'.
Object literal may only specify known properties, and 'searchStatus' does not exist in type '{ searchStatus: SearchStatus; flags: ListFlagsSelection; list: IRecord[]; }[]'
context.d.ts(11, 9): The expected type comes from this index signature
如您所见,searchStatus
它声称在 上不存在的属性Object literal
就在错误消息中显示的类型定义中。它似乎没有抱怨其他属性。
请注意,这SearchStatus
是一个枚举类型。
一切对我来说似乎都很好,那么为什么我会收到这个错误?
这是一个推断类型,所以我虽然可能有助于使函数的返回显式,但它没有帮助,我仍然有同样的问题。
对于进一步的上下文,如果需要,这里是函数,函数本身依赖。第一个函数是提供打字稿用来推断预期回报的详细信息的函数。
public combinedSearchStatuses(searchStatus: SearchStatus) {
return combineLatest(...).pipe(
map(([flags, list]) => ({ searchStatus, flags, list })),
);
}
public combinedMultipleSearchStatuses(searchStatuses: SearchStatus[]) {
return combineLatest(searchStatuses.map(
(searchStatus) => this.combinedSearchStatuses(searchStatus)),
).pipe(distinctUntilChanged((a, b) => {...})