我正在使用redux-observable,但遇到无法理解的Typescript错误,并且如果rxjs管道中的代码行太多,它似乎会随机出现:
Type 'Observable<{}>' is not assignable to type 'Observable<{ type: "feed/PUSH"; payload: Profile; } | { type: "feed/POP"; } | { type: "feed/SWIPE"; payload: Swipe; } | { type: "feed/FETCH_NEXT_IDS"; } | { type: "feed/PUSH_NEXT_IDS"; payload: { nextIds: string[]; nextPage: number; }; } | { ...; } | { ...; } | { ...; }>'.
Type '{}' is not assignable to type '{ type: "feed/PUSH"; payload: Profile; } | { type: "feed/POP"; } | { type: "feed/SWIPE"; payload: Swipe; } | { type: "feed/FETCH_NEXT_IDS"; } | { type: "feed/PUSH_NEXT_IDS"; payload: { nextIds: string[]; nextPage: number; }; } | { ...; } | { ...; } | { ...; }'.
Property 'type' is missing in type '{}' but required in type '{ type: "feed/FETCH_NEXT_PROFILE"; }'.ts(2322)
action.d.ts(36, 5): 'type' is declared here.
index.d.ts(36, 26): The expected type comes from the return type of this signature.
这里是有错误的代码。我在管道中添加了许多tap
函数,以显示仅当我有太多tap
时才会出现错误的事实。如果删除定义的数字tap
,该错误似乎消失了。
export const swipeEpic: Epic<RootAction, RootAction, RootState> = action$ =>
action$.pipe(
filter(isOfType(SWIPE)),
tap(nextIds => {
console.log('fetch new ids result :');
console.log(nextIds);
}),
tap(nextIds => {
console.log('fetch new ids result :');
console.log(nextIds);
}),
tap(nextIds => {
console.log('fetch new ids result :');
console.log(nextIds);
}),
tap(nextIds => {
console.log('fetch new ids result :');
console.log(nextIds);
}),
tap(nextIds => {
console.log('fetch new ids result :');
console.log(nextIds);
}),
tap(nextIds => {
console.log('fetch new ids result :');
console.log(nextIds);
}),
tap(nextIds => {
console.log('fetch new ids result :');
console.log(nextIds);
}),
tap(nextIds => {
console.log('fetch new ids result :');
console.log(nextIds);
}),
map(pop)
// map(fetchNextProfile)
);
[我怀疑您看到的内容与RxJS的pipe()
实用程序仅对pass in 9 operations提供类型安全支持这一事实有关。